اصالت‌سنجی بااستفاده از ورود به سیستم Facebook با جاوا اسکریپت

می‌توانید با ادغام «ورود به سیستم Facebook» در برنامه‌تان، به کاربران اجازه دهید بااستفاده از حساب‌های Facebook خود با Firebase اصالت‌سنجی کنند. می‌توانید «ورود به سیستم Facebook» را بااستفاده از «کیت توسعه نرم‌افزار Firebase» برای انجام جریان ورود به سیستم، یا با انجام جریان «ورود به سیستم Facebook» به‌صورت دستی و انتقال رمز دسترسی حاصل به Firebase ادغام کنید.

قبل از شروع

  1. ‫Firebase را به پروژه جاوا اسکریپت خود اضافه کنید.
  2. در سایت Facebook for Developers، شناسه برنامه و رمز برنامه را برای برنامه‌تان دریافت کنید.
  3. «ورود به سیستم با Facebook» را به‌عنوان ارائه‌دهنده ورود به سیستم برای پروژه Firebase خود فعال کنید:
    1. در کنسول Firebase، به امنیت > اصالت‌سنجی بروید.
    2. در برگه روش ورود به سیستم، ارائه‌دهنده ورود به سیستم Facebook را فعال کنید و شناسه برنامه و رمز برنامه را که از Facebook دریافت کرده‌اید مشخص کنید.
    3. مطمئن شوید که شناسه «URI هدایت OAuth» شما (برای مثال، my-app-12345.firebaseapp.com/__/auth/handler) به‌عنوان یکی از شناسه‌های «URI هدایت OAuth» در صفحه تنظیمات برنامه Facebook شما در سایت Facebook for Developers در پیکربندی تنظیمات محصول > ورود به سیستم Facebook فهرست شده باشد.

مدیریت جریان ورود به سیستم با «کیت توسعه نرم‌افزار Firebase»

اگر برنامه وب می‌سازید، ساده‌ترین راه برای اصالت‌سنجی کاربران با Firebase بااستفاده از حساب‌های Facebook آن‌ها این است که جریان ورود به سیستم را با کیت توسعه نرم‌افزار Firebase JavaScript مدیریت کنید. (اگر می‌خواهید کاربری را در Node.js یا محیط غیرمرورگر دیگری اصالت‌سنجی کنید، باید جریان ورود به سیستم را به‌صورت دستی مدیریت کنید.)

برای مدیریت جریان ورود به سیستم با «کیت توسعه نرم‌افزار جاوا اسکریپت Firebase»، این مراحل را دنبال کنید:

  1. نمونه‌ای از شیء ارائه‌دهنده Facebook ایجاد کنید:

    Web

    import { FacebookAuthProvider } from "firebase/auth";
    
    const provider = new FacebookAuthProvider();

    Web

    var provider = new firebase.auth.FacebookAuthProvider();
  2. اختیاری: دامنه‌های OAuth 2.0 اضافی را که می‌خواهید از ارائه‌دهنده اصالت‌سنجی درخواست کنید مشخص کنید. برای افزودن محدوده، addScope را فراخوانی کنید. برای مثال:

    Web

    provider.addScope('user_birthday');

    Web

    provider.addScope('user_birthday');
    مستندات ارائه‌دهنده اصالت‌سنجی را ببینید.
  3. اختیاری: برای بومی‌سازی کردن جریان OAuth ارائه‌دهنده به زبان ترجیحی کاربر بدون گذراندن صریح پارامترهای سفارشی OAuth مربوطه، کد زبان را در نمونه Auth قبل‌از شروع جریان OAuth به‌روز کنید. برای مثال:

    Web

    import { getAuth } from "firebase/auth";
    
    const auth = getAuth();
    auth.languageCode = 'it';
    // To apply the default browser preference instead of explicitly setting it.
    // auth.useDeviceLanguage();

    Web

    firebase.auth().languageCode = 'it';
    // To apply the default browser preference instead of explicitly setting it.
    // firebase.auth().useDeviceLanguage();
  4. اختیاری: پارامترهای سفارشی ارائه‌دهنده OAuth اضافی را که می‌خواهید با درخواست OAuth ارسال کنید مشخص کنید. برای افزودن پارامتر سفارشی، setCustomParameters را در رساننده مقداردهی‌شده با شیئی که حاوی کلید طبق مشخصات مستندات رساننده OAuth و مقدار مربوطه است فراخوانی کنید. برای مثال:

    Web

    provider.setCustomParameters({
      'display': 'popup'
    });

    Web

    provider.setCustomParameters({
      'display': 'popup'
    });
    پارامترهای OAuth الزامی رزروشده مجاز نیستند و نادیده گرفته خواهند شد. برای جزئیات بیشتر، مرجع ارائه‌دهنده اصالت‌سنجی را ببینید.
  5. بااستفاده از شیء ارائه‌دهنده Facebook، با Firebase اصالت‌سنجی کنید. می‌توانید کاربرانتان را ترغیب کنید با حساب‌های Facebook خود به سیستم وارد شوند، یا با باز کردن پنجره بالاپری یا با هدایت کردن به صفحه ورود به سیستم. روش هدایت در دستگاه‌های همراه ترجیح داده می‌شود.
    • برای ورود به سیستم با پنجره بالاپر، با signInWithPopup تماس بگیرید:

      Web

      import { getAuth, signInWithPopup, FacebookAuthProvider } from "firebase/auth";
      
      const auth = getAuth();
      signInWithPopup(auth, provider)
        .then((result) => {
          // The signed-in user info.
          const user = result.user;
      
          // This gives you a Facebook Access Token. You can use it to access the Facebook API.
          const credential = FacebookAuthProvider.credentialFromResult(result);
          const accessToken = credential.accessToken;
      
          // IdP data available using getAdditionalUserInfo(result)
          // ...
        })
        .catch((error) => {
          // Handle Errors here.
          const errorCode = error.code;
          const errorMessage = error.message;
          // The email of the user's account used.
          const email = error.customData.email;
          // The AuthCredential type that was used.
          const credential = FacebookAuthProvider.credentialFromError(error);
      
          // ...
        });

      Web

      firebase
        .auth()
        .signInWithPopup(provider)
        .then((result) => {
          /** @type {firebase.auth.OAuthCredential} */
          var credential = result.credential;
      
          // The signed-in user info.
          var user = result.user;
          // IdP data available in result.additionalUserInfo.profile.
            // ...
      
          // This gives you a Facebook Access Token. You can use it to access the Facebook API.
          var accessToken = credential.accessToken;
      
          // ...
        })
        .catch((error) => {
          // Handle Errors here.
          var errorCode = error.code;
          var errorMessage = error.message;
          // The email of the user's account used.
          var email = error.email;
          // The firebase.auth.AuthCredential type that was used.
          var credential = error.credential;
      
          // ...
        });
      همچنین توجه داشته باشید که می‌توانید نشان OAuth ارائه‌دهنده Facebook را بازیابی کنید که می‌توان از آن برای واکشی داده‌های اضافی بااستفاده از Facebook APIs استفاده کرد.

      در اینجا می‌توانید خطاها را نیز شناسایی و مدیریت کنید. برای مشاهده فهرست کدهای خطا، به اسناد مرجع Auth نگاهی بیندازید.

    • برای ورود به سیستم با هدایت به صفحه ورود به سیستم، signInWithRedirect را فراخوانی کنید: هنگام استفاده از `signInWithRedirect`، روال‌های مطلوب را دنبال کنید.

      Web

      import { getAuth, signInWithRedirect } from "firebase/auth";
      
      const auth = getAuth();
      signInWithRedirect(auth, provider);

      Web

      firebase.auth().signInWithRedirect(provider);
      سپس، می‌توانید با فراخوانی getRedirectResult هنگام بار شدن صفحه‌تان، رمز OAuth ارائه‌دهنده Facebook را نیز بازیابی کنید:

      Web

      import { getAuth, getRedirectResult, FacebookAuthProvider } from "firebase/auth";
      
      const auth = getAuth();
      getRedirectResult(auth)
        .then((result) => {
          // This gives you a Facebook Access Token. You can use it to access the Facebook API.
          const credential = FacebookAuthProvider.credentialFromResult(result);
          const token = credential.accessToken;
      
          const user = result.user;
          // IdP data available using getAdditionalUserInfo(result)
          // ...
        }).catch((error) => {
          // Handle Errors here.
          const errorCode = error.code;
          const errorMessage = error.message;
          // The email of the user's account used.
          const email = error.customData.email;
          // AuthCredential type that was used.
          const credential = FacebookAuthProvider.credentialFromError(error);
          // ...
        });

      Web

      firebase.auth()
        .getRedirectResult()
        .then((result) => {
          if (result.credential) {
            /** @type {firebase.auth.OAuthCredential} */
            var credential = result.credential;
      
            // This gives you a Facebook Access Token. You can use it to access the Facebook API.
            var token = credential.accessToken;
            // ...
          }
          // The signed-in user info.
          var user = result.user;
          // IdP data available in result.additionalUserInfo.profile.
            // ...
        }).catch((error) => {
          // Handle Errors here.
          var errorCode = error.code;
          var errorMessage = error.message;
          // The email of the user's account used.
          var email = error.email;
          // The firebase.auth.AuthCredential type that was used.
          var credential = error.credential;
          // ...
        });
      در اینجا می‌توانید خطاها را نیز شناسایی و مدیریت کنید. برای مشاهده فهرست کدهای خطا، به اسناد مرجع Auth نگاهی بیندازید.

اصالت‌سنجی با Firebase در افزونه Chrome

اگر درحال ساختن برنامه افزونه Chrome هستید، راهنمای «سندهای خارج از صفحه» را ببینید.

مراحل بعدی

پس‌از اینکه کاربر برای اولین‌بار به سیستم وارد شد، حساب کاربری جدیدی ایجاد می‌شود و به اطلاعات اعتباری—یعنی نام کاربری و گذرواژه، شماره تلفن، یا اطلاعات ارائه‌دهنده اصالت‌سنجی—که کاربر با آن به سیستم وارد شده است پیوند داده می‌شود. این حساب جدید به‌عنوان بخشی از پروژه Firebase شما ذخیره می‌شود و می‌توان از آن برای شناسایی کاربر در همه برنامه‌های پروژه شما، صرف‌نظر از نحوه ورود کاربر به سیستم، استفاده کرد.

  • در برنامه‌هایتان، روش توصیه‌شده برای اطلاع از وضعیت اصالت‌سنجی کاربر این است که روی شیء Auth ناظر تنظیم کنید. سپس می‌توانید اطلاعات نمایه پایه کاربر را از شیء User دریافت کنید. به مدیریت کاربران مراجعه کنید.

  • در Firebase Realtime Database و Cloud Storage قوانین امنیتی، می‌توانید شناسه کاربر یکتای کاربر واردشده به سیستم را از متغیر auth دریافت کنید و از آن برای کنترل داده‌هایی که کاربر می‌تواند به آن‌ها دسترسی داشته باشد استفاده کنید.

می‌توانید به کاربران اجازه دهید با پیوند دادن اطلاعات اعتباری ارائه‌دهنده اصالت‌سنجی به حساب کاربری موجود بااستفاده از چندین ارائه‌دهنده اصالت‌سنجی به سیستم برنامه‌تان وارد شوند.

برای خروج از سیستم کاربر، signOut را فراخوانی کنید:

Web

import { getAuth, signOut } from "firebase/auth";

const auth = getAuth();
signOut(auth).then(() => {
  // Sign-out successful.
}).catch((error) => {
  // An error happened.
});

Web

firebase.auth().signOut().then(() => {
  // Sign-out successful.
}).catch((error) => {
  // An error happened.
});