با ادغام احراز هویت توییتر در برنامه خود، می توانید به کاربران خود اجازه دهید با استفاده از حساب های توییتر خود با Firebase احراز هویت کنند. میتوانید احراز هویت توییتر را با استفاده از Firebase SDK برای انجام جریان ورود به سیستم یا با انجام دستی جریان OAuth توییتر و ارسال رمز دسترسی و رمز به Firebase یکپارچه کنید.
قبل از اینکه شروع کنی
- Firebase را به پروژه جاوا اسکریپت خود اضافه کنید .
- در کنسول Firebase ، بخش Auth را باز کنید.
- در برگه روش ورود به سیستم، ارائه دهنده توییتر را فعال کنید.
- کلید API و راز API را از کنسول توسعه دهنده آن ارائه دهنده به پیکربندی ارائه دهنده اضافه کنید:
- برنامه خود را به عنوان یک برنامه توسعه دهنده در توییتر ثبت کنید و کلید OAuth API و راز API برنامه خود را دریافت کنید.
- مطمئن شوید که URI تغییر مسیر Firebase OAuth شما (به عنوان مثال
my-app-12345.firebaseapp.com/__/auth/handler
) به عنوان URL بازگشت به تماس مجوز شما در صفحه تنظیمات برنامه در تنظیمات برنامه توییتر شما تنظیم شده است.
- روی ذخیره کلیک کنید.
جریان ورود به سیستم را با Firebase SDK مدیریت کنید
اگر در حال ساختن یک برنامه وب هستید، سادهترین راه برای احراز هویت کاربران با Firebase با استفاده از حسابهای توییتر آنها، مدیریت جریان ورود به سیستم با Firebase JavaScript SDK است. (اگر می خواهید یک کاربر را در Node.js یا سایر محیط های غیر مرورگر احراز هویت کنید، باید جریان ورود به سیستم را به صورت دستی مدیریت کنید.)
برای مدیریت جریان ورود به سیستم با Firebase JavaScript SDK، این مراحل را دنبال کنید:
- یک نمونه از شی ارائه دهنده توییتر ایجاد کنید:
Web version 9
import { TwitterAuthProvider } from "firebase/auth"; const provider = new TwitterAuthProvider();
Web version 8
var provider = new firebase.auth.TwitterAuthProvider();
- اختیاری : برای بومیسازی جریان OAuth ارائهدهنده به زبان ترجیحی کاربر بدون ارسال صریح پارامترهای OAuth سفارشی مربوطه، قبل از شروع جریان OAuth، کد زبان را در نمونه Auth بهروزرسانی کنید. مثلا:
Web version 9
import { getAuth } from "firebase/auth"; const auth = getAuth(); auth.languageCode = 'it'; // To apply the default browser preference instead of explicitly setting it. // firebase.auth().useDeviceLanguage();
Web version 8
firebase.auth().languageCode = 'it'; // To apply the default browser preference instead of explicitly setting it. // firebase.auth().useDeviceLanguage();
- اختیاری : پارامترهای اضافی ارائهدهنده OAuth را که میخواهید با درخواست OAuth ارسال کنید، مشخص کنید. برای افزودن یک پارامتر سفارشی،
setCustomParameters
را در ارائه دهنده اولیه با یک شی حاوی کلید مشخص شده توسط اسناد ارائه دهنده OAuth و مقدار مربوطه فراخوانی کنید. مثلا:پارامترهای OAuth مورد نیاز رزرو شده مجاز نیستند و نادیده گرفته خواهند شد. برای جزئیات بیشتر به مرجع ارائه دهنده احراز هویت مراجعه کنید.Web version 9
provider.setCustomParameters({ 'lang': 'es' });
Web version 8
provider.setCustomParameters({ 'lang': 'es' });
- با استفاده از شی ارائه دهنده Twitter با Firebase احراز هویت کنید. میتوانید با باز کردن یک پنجره بازشو یا با هدایت مجدد به صفحه ورود، از کاربران خود بخواهید با حسابهای توییتر خود وارد شوند. روش تغییر مسیر در دستگاه های تلفن همراه ترجیح داده می شود.
- برای ورود به سیستم با یک پنجره بازشو،
signInWithPopup
تماس بگیرید:همچنین توجه داشته باشید که می توانید توکن OAuth ارائه دهنده توییتر را بازیابی کنید که می تواند برای واکشی داده های اضافی با استفاده از API های Twitter استفاده شود.Web version 9
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 version 8
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; // ... });
این نیز جایی است که می توانید خطاها را پیدا کرده و کنترل کنید. برای فهرستی از کدهای خطا، به اسناد مرجع تأییدیه نگاهی بیندازید.
- برای ورود به صفحه ورود به سیستم، با
signInWithRedirect
تماس بگیرید: هنگام استفاده از «signInWithRedirect»، بهترین روشها را دنبال کنید.سپس، میتوانید با فراخوانیWeb version 9
import { getAuth, signInWithRedirect } from "firebase/auth"; const auth = getAuth(); signInWithRedirect(auth, provider);
Web version 8
firebase.auth().signInWithRedirect(provider);
getRedirectResult
هنگام بارگیری صفحه، توکن OAuth ارائهدهنده توییتر را بازیابی کنید:این نیز جایی است که می توانید خطاها را پیدا کرده و کنترل کنید. برای فهرستی از کدهای خطا، به اسناد مرجع تأییدیه نگاهی بیندازید.Web version 9
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 version 8
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; // ... });
- برای ورود به سیستم با یک پنجره بازشو،
جریان ورود به سیستم را به صورت دستی مدیریت کنید
همچنین میتوانید با استفاده از یک حساب توییتر با Firebase احراز هویت را با کنترل جریان ورود با تماس با نقاط پایانی Twitter OAuth تأیید کنید:
- با دنبال کردن اسناد توسعه دهنده، احراز هویت توییتر را در برنامه خود ادغام کنید. در پایان جریان ورود به سیستم توییتر، یک نشانه دسترسی OAuth و یک رمز OAuth دریافت خواهید کرد.
- اگر نیاز به ورود به برنامه Node.js دارید، رمز دسترسی OAuth و رمز OAuth را به برنامه Node.js ارسال کنید.
- پس از اینکه کاربر با موفقیت وارد توییتر شد، رمز دسترسی OAuth و راز OAuth را با اعتبار Firebase مبادله کنید:
var credential = firebase.auth.TwitterAuthProvider.credential(token, secret);
- احراز هویت با Firebase با استفاده از اعتبار Firebase:
Web version 9
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 version 8
// 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 هستید، باید شناسه برنامه افزودنی Chrome خود را اضافه کنید:
- پروژه خود را در کنسول Firebase باز کنید.
- در بخش Authentication ، صفحه روش ورود به سیستم را باز کنید.
- یک URI مانند زیر به لیست دامنه های مجاز اضافه کنید:
chrome-extension://CHROME_EXTENSION_ID
فقط عملیات بازشو ( signInWithPopup
، linkWithPopup
، و reauthenticateWithPopup
) برای برنامههای افزودنی Chrome در دسترس است، زیرا برنامههای افزودنی Chrome نمیتوانند از تغییر مسیرهای HTTP استفاده کنند. شما باید این روشها را از یک اسکریپت صفحه پسزمینه فراخوانی کنید تا از یک پنجره عملکرد مرورگر، زیرا پنجره بازشو احراز هویت، پنجره عملیات مرورگر را لغو میکند. روشهای بازشو فقط در برنامههای افزودنی با استفاده از Manifest V2 قابل استفاده هستند. Manifest V3 جدیدتر فقط به اسکریپتهای پسزمینه در قالب سرویسدهندگان اجازه میدهد، که اصلاً نمیتوانند عملیات بازشو را انجام دهند.
در فایل مانیفست افزونه Chrome خود، مطمئن شوید که URL https://apis.google.com
را به لیست مجاز content_security_policy
اضافه کنید.
مراحل بعدی
پس از اینکه کاربر برای اولین بار وارد سیستم شد، یک حساب کاربری جدید ایجاد میشود و به اعتبارنامهها (یعنی نام کاربری و رمز عبور، شماره تلفن یا اطلاعات ارائهدهنده تاییدیه) مرتبط میشود که کاربر با آن وارد شده است. این حساب جدید بهعنوان بخشی از پروژه Firebase شما ذخیره میشود و میتوان از آن برای شناسایی کاربر در همه برنامههای پروژه شما، صرف نظر از نحوه ورود کاربر به سیستم استفاده کرد.
در برنامه های شما، روش توصیه شده برای اطلاع از وضعیت احراز هویت کاربر، تنظیم یک ناظر بر روی شی
Auth
است. سپس می توانید اطلاعات اولیه پروفایل کاربر را از شیUser
دریافت کنید. به مدیریت کاربران مراجعه کنید.در قوانین امنیتی Firebase Realtime Database و Cloud Storage خود، میتوانید شناسه کاربری منحصر به فرد کاربر واردشده به سیستم را از متغیر
auth
دریافت کنید و از آن برای کنترل دادههایی که کاربر میتواند به آن دسترسی داشته باشد استفاده کنید.
میتوانید به کاربران اجازه دهید با استفاده از چندین ارائهدهنده احراز هویت، با پیوند دادن اعتبار ارائهدهنده تأیید اعتبار به یک حساب کاربری موجود، به برنامه شما وارد شوند.
برای خروج از سیستم کاربر، با خروج از سیستم تماس signOut
:
Web version 9
import { getAuth, signOut } from "firebase/auth"; const auth = getAuth(); signOut(auth).then(() => { // Sign-out successful. }).catch((error) => { // An error happened. });
Web version 8
firebase.auth().signOut().then(() => { // Sign-out successful. }).catch((error) => { // An error happened. });