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

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

قبل از شروع

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

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

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

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

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

    Web

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

    Web

    var provider = new firebase.auth.TwitterAuthProvider();
  2. اختیاری: برای بومی‌سازی کردن جریان 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();
  3. اختیاری: پارامترهای سفارشی ارائه‌دهنده OAuth اضافی را که می‌خواهید با درخواست OAuth ارسال کنید مشخص کنید. برای افزودن پارامتر سفارشی، setCustomParameters را در رساننده مقداردهی‌شده با شیئی که حاوی کلید طبق مشخصات مستندات رساننده OAuth و مقدار مربوطه است فراخوانی کنید. برای مثال:

    Web

    provider.setCustomParameters({
      'lang': 'es'
    });

    Web

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

      Web

      import { getAuth, signInWithPopup, TwitterAuthProvider } from "firebase/auth";
      
      const auth = getAuth();
      signInWithPopup(auth, provider)
        .then((result) => {
          // This gives you a the Twitter OAuth 1.0 Access Token and Secret.
          // You can use these server side with your app's credentials to access the Twitter API.
          const credential = TwitterAuthProvider.credentialFromResult(result);
          const token = credential.accessToken;
          const secret = credential.secret;
      
          // The signed-in user info.
          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;
          // The AuthCredential type that was used.
          const credential = TwitterAuthProvider.credentialFromError(error);
          // ...
        });

      Web

      firebase
        .auth()
        .signInWithPopup(provider)
        .then((result) => {
          /** @type {firebase.auth.OAuthCredential} */
          var credential = result.credential;
      
          // This gives you a the Twitter OAuth 1.0 Access Token and Secret.
          // You can use these server side with your app's credentials to access the Twitter API.
          var token = credential.accessToken;
          var secret = credential.secret;
      
          // 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;
          // ...
        });
      همچنین توجه داشته باشید که می‌توانید نشان OAuth ارائه‌دهنده Twitter را بازیابی کنید که می‌توان از آن برای واکشی داده‌های اضافی بااستفاده از Twitter APIs استفاده کرد.

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

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

      Web

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

      Web

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

      Web

      import { getAuth, getRedirectResult, TwitterAuthProvider } from "firebase/auth";
      
      const auth = getAuth();
      getRedirectResult(auth)
        .then((result) => {
          // This gives you a the Twitter OAuth 1.0 Access Token and Secret.
          // You can use these server side with your app's credentials to access the Twitter API.
          const credential = TwitterAuthProvider.credentialFromResult(result);
          const token = credential.accessToken;
          const secret = credential.secret;
          // ...
      
          // The signed-in user info.
          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;
          // The AuthCredential type that was used.
          const credential = TwitterAuthProvider.credentialFromError(error);
          // ...
        });

      Web

      firebase.auth()
        .getRedirectResult()
        .then((result) => {
          if (result.credential) {
            /** @type {firebase.auth.OAuthCredential} */
            var credential = result.credential;
      
            // This gives you a the Twitter OAuth 1.0 Access Token and Secret.
            // You can use these server side with your app's credentials to access the Twitter API.
            var token = credential.accessToken;
            var secret = credential.secret;
            // ...
          }
      
          // 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 نگاهی بیندازید.

جریان ورود به سیستم را به‌صورت دستی مدیریت کنید

همچنین می‌توانید بااستفاده از حساب Twitter با Firebase اصالت‌سنجی کنید و جریان ورود به سیستم را با فراخوانی نقطه‌های پایانی Twitter OAuth مدیریت کنید:

  1. با دنبال کردن مستندات توسعه‌دهنده، اصالت‌سنجی Twitter را در برنامه‌تان ادغام کنید. در پایان جریان ورود به سیستم Twitter، یک کد دسترسی OAuth و یک رمز OAuth دریافت خواهید کرد.
  2. اگر نیاز دارید در برنامه Node.js به سیستم وارد شوید، رمز دسترسی OAuth و رمز OAuth را به برنامه Node.js ارسال کنید.
  3. پس‌از اینکه کاربری با موفقیت با Twitter به سیستم وارد شد، ژتون دسترسی OAuth و رمز OAuth را با اعتبار Firebase مبادله کنید:
    var credential = firebase.auth.TwitterAuthProvider.credential(token, secret);
  4. بااستفاده از اطلاعات اعتباری Firebase، با Firebase اصالت‌سنجی کنید:

    Web

    import { getAuth, signInWithCredential, FacebookAuthProvider } from "firebase/auth";
    
    // Sign in with the credential from the Facebook user.
    const auth = getAuth();
    signInWithCredential(auth, credential)
      .then((result) => {
        // Signed in 
        const credential = FacebookAuthProvider.credentialFromResult(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

    // Sign in with the credential from the Facebook user.
    firebase.auth().signInWithCredential(credential)
      .then((result) => {
        // Signed in       
        var credential = result.credential;
        // ...
      })
      .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;
        // ...
      });

اصالت‌سنجی با 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.
});