میتوانید بااستفاده از ارائهدهندگان OAuth مثل Yahoo به کاربران اجازه دهید با Firebase اصالتسنجی کنند. برای این کار، بااستفاده از «کیت توسعه نرمافزار Firebase»، «ورود به سیستم OAuth عمومی» را در برنامهتان ادغام کنید تا جریان ورود به سیستم سرتاسری را انجام دهید.
قبل از شروع
برای ورود به سیستم کاربران بااستفاده از حسابهای Yahoo، ابتدا باید Yahoo را بهعنوان ارائهدهنده ورود به سیستم برای پروژه Firebase خود فعال کنید:
- Firebase را به پروژه جاوا اسکریپت خود اضافه کنید.
- در کنسول Firebase، به امنیت > اصالتسنجی بروید.
- در زبانه روش ورود به سیستم، ارائهدهنده ورود به سیستم Yahoo را فعال کنید.
-
شناسه کارخواه و رمز کارخواه را از کنسول توسعهدهنده آن ارائهدهنده به پیکربندی ارائهدهنده اضافه کنید:
-
برای ثبت کارخواه Yahoo OAuth، مستندات توسعهدهنده Yahoo را درباره ثبت برنامه وب با Yahoo دنبال کنید.
حتماً دو اجازه OpenID Connect API را انتخاب کنید:
profileوemail. -
هنگام ثبت برنامهها با این ارائهدهندگان، حتماً
دامنه
*.firebaseapp.comرا برای پروژه خود بهعنوان دامنه هدایت مجدد برای برنامه خود ثبت کنید.
-
- روی ذخیره کردن کلیک کنید.
مدیریت جریان ورود به سیستم با «کیت توسعه نرمافزار Firebase»
اگر برنامه وب میسازید، سادهترین راه برای اصالتسنجی کاربران با Firebase بااستفاده از حسابهای Yahoo آنها این است که کل جریان ورود به سیستم را با کیت توسعه نرمافزار Firebase JavaScript مدیریت کنید.
برای مدیریت جریان ورود به سیستم با «کیت توسعه نرمافزار جاوا اسکریپت Firebase»، این مراحل را دنبال کنید:
بااستفاده از شناسه ارائهدهنده yahoo.com، نمونهای از OAuthProvider ایجاد کنید.
Web
import { OAuthProvider } from "firebase/auth"; const provider = new OAuthProvider('yahoo.com');
Web
var provider = new firebase.auth.OAuthProvider('yahoo.com');
اختیاری: پارامترهای سفارشی OAuth اضافی را که میخواهید با درخواست OAuth ارسال کنید مشخص کنید.
Web
provider.setCustomParameters({ // Prompt user to re-authenticate to Yahoo. prompt: 'login', // Localize to French. language: 'fr' });
Web
provider.setCustomParameters({ // Prompt user to re-authenticate to Yahoo. prompt: 'login', // Localize to French. language: 'fr' });
برای پارامترهایی که Yahoo پشتیبانی میکند، به مستندات Yahoo OAuth مراجعه کنید. توجه داشته باشید که نمیتوانید پارامترهای الزامی Firebase را با
setCustomParameters()ارسال کنید. این پارامترها عبارتاند از client_id، redirect_uri، response_type، scope، و state.اختیاری: دامنههای OAuth 2.0 اضافی را فراتر از
profileوemailکه میخواهید از ارائهدهنده اصالتسنجی درخواست کنید مشخص کنید. اگر برنامه شما نیاز به دسترسی به دادههای خصوصی کاربر از Yahoo APIs دارد، باید در اجازههای API در کنسول توسعهدهندگان Yahoo، اجازههای Yahoo APIs را درخواست کنید. محدودههای OAuth درخواستی باید دقیقاً با محدودههای ازپیشپیکربندیشده در اجازههای API برنامه مطابقت داشته باشند. برای مثال، اگر دسترسی خواندن/نوشتن به مخاطبین کاربر درخواست شده باشد و در اجازههای API برنامه ازپیش پیکربندی شده باشد،sdct-wباید بهجای محدوده OAuth فقط خواندنیsdct-rارسال شود. درغیراینصورت، جریان ناموفق خواهد بود و خطایی به کاربر نهایی نشان داده خواهد شد.Web
// Request access to Yahoo Mail API. provider.addScope('mail-r'); // Request read/write access to user contacts. // This must be preconfigured in the app's API permissions. provider.addScope('sdct-w');
Web
// Request access to Yahoo Mail API. provider.addScope('mail-r'); // Request read/write access to user contacts. // This must be preconfigured in the app's API permissions. provider.addScope('sdct-w');
برای کسب اطلاعات بیشتر، به مستندات محدودههای Yahoo مراجعه کنید.
بااستفاده از شیء ارائهدهنده OAuth، با Firebase اصالتسنجی کنید. میتوانید از کاربرانتان بخواهید با «حسابهای Yahoo» خود به سیستم وارد شوند. این کار را میتوانید با باز کردن پنجره بالاپری یا با هدایت کردن به صفحه ورود به سیستم انجام دهید. روش هدایت مجدد در دستگاههای همراه ترجیح داده میشود.
برای ورود به سیستم با پنجره بالاپر، با
signInWithPopupتماس بگیرید:Web
import { getAuth, signInWithPopup, OAuthProvider } from "firebase/auth"; const auth = getAuth(); signInWithPopup(auth, provider) .then((result) => { // IdP data available in result.additionalUserInfo.profile // ... // Yahoo OAuth access token and ID token can be retrieved by calling: const credential = OAuthProvider.credentialFromResult(result); const accessToken = credential.accessToken; const idToken = credential.idToken; }) .catch((error) => { // Handle error. });
Web
firebase.auth().signInWithPopup(provider) .then((result) => { // IdP data available in result.additionalUserInfo.profile // ... /** @type {firebase.auth.OAuthCredential} */ const credential = result.credential; // Yahoo OAuth access token and ID token can be retrieved by calling: var accessToken = credential.accessToken; var idToken = credential.idToken; }) .catch((error) => { // Handle error. });
برای ورود به سیستم با هدایت شدن به صفحه ورود به سیستم، با
signInWithRedirectتماس بگیرید:
هنگام استفاده از
signInWithRedirect،linkWithRedirect، یاreauthenticateWithRedirect، روالهای مطلوب را دنبال کنید.firebase.auth().signInWithRedirect(provider);
پساز اینکه کاربر ورود به سیستم را تکمیل کرد و به صفحه برگشت، میتوانید نتیجه ورود به سیستم را با فراخوانی
getRedirectResultدریافت کنید.Web
import { getAuth, signInWithRedirect } from "firebase/auth"; const auth = getAuth(); signInWithRedirect(auth, provider);
Web
firebase.auth().signInWithRedirect(provider);
پساز تکمیل موفقیتآمیز، کد شناسایی OAuth و کد دسترسی مرتبط با ارائهدهنده را میتوان از شیء
firebase.auth.UserCredentialبرگرداندهشده بازیابی کرد.بااستفاده از کد دسترسی OAuth، میتوانید Yahoo API را فراخوانی کنید.
برای مثال، برای دریافت اطلاعات نمایه پایه، میتوان از REST API زیر استفاده کرد:
curl -i -H "Authorization: Bearer ACCESS_TOKEN" https://social.yahooapis.com/v1/user/YAHOO_USER_UID/profile?format=json
که در آن
YAHOO_USER_UIDشناسه کاربر Yahoo است که میتواند از فیلدfirebase.auth().currentUser.providerData[0].uidیا ازresult.additionalUserInfo.profileبازیابی شود.اگرچه مثالهای بالا بر جریانهای ورود به سیستم تمرکز دارند، شما همچنین میتوانید بااستفاده از
linkWithPopup/linkWithRedirectارائهدهنده Yahoo را به کاربر موجود پیوند دهید. برای مثال، میتوانید چندین ارائهدهنده را به یک کاربر پیوند دهید و به او اجازه دهید با هرکدام از آنها به سیستم وارد شود.Web
import { getAuth, linkWithPopup, OAuthProvider } from "firebase/auth"; const provider = new OAuthProvider('yahoo.com'); const auth = getAuth(); linkWithPopup(auth.currentUser, provider) .then((result) => { // Yahoo credential is linked to the current user. // IdP data available in result.additionalUserInfo.profile. // Get the OAuth access token and ID Token const credential = OAuthProvider.credentialFromResult(result); const accessToken = credential.accessToken; const idToken = credential.idToken; }) .catch((error) => { // Handle error. });
Web
var provider = new firebase.auth.OAuthProvider('yahoo.com'); firebase.auth().currentUser.linkWithPopup(provider) .then((result) => { // Yahoo credential is linked to the current user. // IdP data available in result.additionalUserInfo.profile. // Yahoo OAuth access token can be retrieved by calling: // result.credential.accessToken // Yahoo OAuth ID token can be retrieved by calling: // result.credential.idToken }) .catch((error) => { // Handle error. });
از همین الگو میتوان با
reauthenticateWithPopup/reauthenticateWithRedirectاستفاده کرد که میتوان از آن برای بازیابی اطلاعات اعتباری جدید برای عملیات حساس که نیاز به ورود به سیستم اخیر دارند استفاده کرد.Web
import { getAuth, reauthenticateWithPopup, OAuthProvider } from "firebase/auth"; const provider = new OAuthProvider('yahoo.com'); const auth = getAuth(); reauthenticateWithPopup(auth.currentUser, provider) .then((result) => { // User is re-authenticated with fresh tokens minted and // should be able to perform sensitive operations like account // deletion and email or password update. // IdP data available in result.additionalUserInfo.profile. // Get the OAuth access token and ID Token const credential = OAuthProvider.credentialFromResult(result); const accessToken = credential.accessToken; const idToken = credential.idToken; }) .catch((error) => { // Handle error. });
Web
var provider = new firebase.auth.OAuthProvider('yahoo.com'); firebase.auth().currentUser.reauthenticateWithPopup(provider) .then((result) => { // User is re-authenticated with fresh tokens minted and // should be able to perform sensitive operations like account // deletion and email or password update. // IdP data available in result.additionalUserInfo.profile. // Yahoo OAuth access token can be retrieved by calling: // result.credential.accessToken // Yahoo OAuth ID token can be retrieved by calling: // result.credential.idToken }) .catch((error) => { // Handle error. });
اصالتسنجی با 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. });