अपने उपयोगकर्ताओं को Firebase की मदद से पुष्टि करने की सुविधा दी जा सकती है. इसके लिए, Microsoft Azure Active Directory जैसे OAuth प्रोवाइडर का इस्तेमाल करें. इसके लिए, Firebase SDK का इस्तेमाल करके, अपने ऐप्लिकेशन में सामान्य OAuth लॉगिन को इंटिग्रेट करें, ताकि साइन-इन की प्रोसेस को पूरा किया जा सके.
शुरू करने से पहले
Microsoft खातों (Azure Active Directory और निजी Microsoft खाते) का इस्तेमाल करके लोगों को साइन इन करने की सुविधा देने के लिए, आपको सबसे पहले अपने Firebase प्रोजेक्ट के लिए, Microsoft को साइन-इन की सुविधा देने वाली कंपनी के तौर पर चालू करना होगा:
- अपने JavaScript प्रोजेक्ट में Firebase जोड़ें.
- Firebase console में, सुरक्षा > पुष्टि पर जाएं.
- साइन-इन का तरीका टैब में जाकर, Microsoft साइन-इन की सुविधा देने वाली सेवा चालू करें.
-
उस सेवा देने वाली कंपनी की डेवलपर कंसोल से, सेवा देने वाली कंपनी के कॉन्फ़िगरेशन में क्लाइंट आईडी और क्लाइंट सीक्रेट जोड़ें:
- Microsoft OAuth क्लाइंट को रजिस्टर करने के लिए, क्विकस्टार्ट: Azure Active Directory v2.0 एंडपॉइंट के साथ ऐप्लिकेशन रजिस्टर करना में दिए गए निर्देशों का पालन करें. ध्यान दें कि इस एंडपॉइंट पर, Microsoft के निजी खातों के साथ-साथ Azure Active Directory खातों का इस्तेमाल करके भी साइन-इन किया जा सकता है. Azure Active Directory v2.0 के बारे में ज़्यादा जानें.
-
इन कंपनियों के साथ ऐप्लिकेशन रजिस्टर करते समय, अपने प्रोजेक्ट के
*.firebaseapp.comडोमेन को अपने ऐप्लिकेशन के रीडायरेक्ट डोमेन के तौर पर रजिस्टर करना न भूलें.
- सेव करें पर क्लिक करें.
Firebase SDK की मदद से, साइन-इन फ़्लो को मैनेज करना
अगर आपको कोई वेब ऐप्लिकेशन बनाना है, तो Microsoft खातों का इस्तेमाल करके Firebase के साथ अपने उपयोगकर्ताओं की पुष्टि करने का सबसे आसान तरीका यह है कि आप Firebase JavaScript SDK का इस्तेमाल करके, साइन-इन करने की पूरी प्रोसेस को मैनेज करें.
Firebase JavaScript SDK की मदद से साइन-इन फ़्लो को मैनेज करने के लिए, यह तरीका अपनाएं:
प्रोवाइडर आईडी microsoft.com का इस्तेमाल करके, OAuthProvider का इंस्टेंस बनाएं.
Web
import { OAuthProvider } from "firebase/auth"; const provider = new OAuthProvider('microsoft.com');
Web
var provider = new firebase.auth.OAuthProvider('microsoft.com');
वैकल्पिक: OAuth के अतिरिक्त कस्टम पैरामीटर तय करें. ये पैरामीटर, OAuth के अनुरोध के साथ भेजे जाएंगे.
Web
provider.setCustomParameters({ // Force re-consent. prompt: 'consent', // Target specific email with login hint. login_hint: 'user@firstadd.onmicrosoft.com' });
Web
provider.setCustomParameters({ // Force re-consent. prompt: 'consent', // Target specific email with login hint. login_hint: 'user@firstadd.onmicrosoft.com' });
Microsoft के साथ काम करने वाले पैरामीटर के बारे में जानने के लिए, Microsoft OAuth का दस्तावेज़ देखें. ध्यान दें कि Firebase के लिए ज़रूरी पैरामीटर,
setCustomParameters()के साथ पास नहीं किए जा सकते. ये पैरामीटर client_id, response_type, redirect_uri, state, scope, और response_mode हैं.अगर आपको किसी ऐप्लिकेशन में सिर्फ़ किसी Azure AD टेनेंट के उपयोगकर्ताओं को साइन इन करने की अनुमति देनी है, तो Azure AD टेनेंट के फ़्रेंडली डोमेन नेम या टेनेंट के GUID आइडेंटिफ़ायर का इस्तेमाल किया जा सकता है. इसके लिए, कस्टम पैरामीटर ऑब्जेक्ट में "tenant" फ़ील्ड की जानकारी देनी होगी.
Web
provider.setCustomParameters({ // Optional "tenant" parameter in case you are using an Azure AD tenant. // eg. '8eaef023-2b34-4da1-9baa-8bc8c9d6a490' or 'contoso.onmicrosoft.com' // or "common" for tenant-independent tokens. // The default value is "common". tenant: 'TENANT_ID' });
Web
provider.setCustomParameters({ // Optional "tenant" parameter in case you are using an Azure AD tenant. // eg. '8eaef023-2b34-4da1-9baa-8bc8c9d6a490' or 'contoso.onmicrosoft.com' // or "common" for tenant-independent tokens. // The default value is "common". tenant: 'TENANT_ID' });
ज़रूरी नहीं: बुनियादी प्रोफ़ाइल के अलावा, OAuth 2.0 के अन्य स्कोप तय करें. आपको पुष्टि करने की सेवा देने वाली कंपनी से इनके लिए अनुरोध करना होगा.
provider.addScope('mail.read'); provider.addScope('calendars.read');ज़्यादा जानने के लिए, Microsoft की अनुमतियों और सहमति से जुड़ा दस्तावेज़ पढ़ें.
OAuth प्रोवाइडर ऑब्जेक्ट का इस्तेमाल करके, Firebase से पुष्टि करें. अपने उपयोगकर्ताओं को Microsoft खातों से साइन इन करने के लिए कहा जा सकता है. इसके लिए, पॉप-अप विंडो खोलें या उन्हें साइन-इन पेज पर रीडायरेक्ट करें. मोबाइल डिवाइसों पर रीडायरेक्ट करने के लिए, इस तरीके का इस्तेमाल करना बेहतर होता है.
- पॉप-अप विंडो की मदद से साइन इन करने के लिए,
signInWithPopupको कॉल करें:
Web
import { getAuth, signInWithPopup, OAuthProvider } from "firebase/auth"; const auth = getAuth(); signInWithPopup(auth, provider) .then((result) => { // User is signed in. // 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
firebase.auth().signInWithPopup(provider) .then((result) => { // IdP data available in result.additionalUserInfo.profile. // ... /** @type {firebase.auth.OAuthCredential} */ var credential = result.credential; // OAuth access and id tokens can also be retrieved: var accessToken = credential.accessToken; var idToken = credential.idToken; }) .catch((error) => { // Handle error. });
- साइन-इन पेज पर रीडायरेक्ट करके साइन इन करने के लिए,
signInWithRedirectको कॉल करें:
signInWithRedirect,linkWithRedirectयाreauthenticateWithRedirectका इस्तेमाल करते समय, सबसे सही तरीके अपनाएं.Web
import { getAuth, signInWithRedirect } from "firebase/auth"; const auth = getAuth(); signInWithRedirect(auth, provider);
Web
firebase.auth().signInWithRedirect(provider);
जब उपयोगकर्ता साइन इन कर लेता है और पेज पर वापस आ जाता है, तब
getRedirectResultको कॉल करके, साइन इन करने का नतीजा पाया जा सकता है.Web
import { getAuth, getRedirectResult, OAuthProvider } from "firebase/auth"; const auth = getAuth(); getRedirectResult(auth) .then((result) => { // User is signed in. // 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
firebase.auth().getRedirectResult() .then((result) => { // IdP data available in result.additionalUserInfo.profile. // ... /** @type {firebase.auth.OAuthCredential} */ var credential = result.credential; // OAuth access and id tokens can also be retrieved: var accessToken = credential.accessToken; var idToken = credential.idToken; }) .catch((error) => { // Handle error. });
प्रोसेस पूरी होने के बाद, सेवा देने वाली कंपनी से जुड़ा OAuth ऐक्सेस टोकन,
firebase.auth.UserCredentialऑब्जेक्ट से वापस पाया जा सकता है.OAuth ऐक्सेस टोकन का इस्तेमाल करके, Microsoft Graph API को कॉल किया जा सकता है.
उदाहरण के लिए, प्रोफ़ाइल की बुनियादी जानकारी पाने के लिए, इस REST API को कॉल किया जा सकता है:
curl -i -H "Authorization: Bearer ACCESS_TOKEN" https://graph.microsoft.com/v1.0/me
Firebase Auth के साथ काम करने वाले अन्य प्रोवाइडर के उलट, Microsoft फ़ोटो का यूआरएल नहीं देता है. इसके बजाय, प्रोफ़ाइल फ़ोटो के बाइनरी डेटा का अनुरोध Microsoft Graph API के ज़रिए करना होता है.
OAuth ऐक्सेस टोकन के अलावा, उपयोगकर्ता के OAuth आईडी टोकन को भी
firebase.auth.UserCredentialऑब्जेक्ट से वापस पाया जा सकता है. आईडी टोकन में मौजूदsubदावा, ऐप्लिकेशन के हिसाब से होता है. यह फ़ेडरेट किए गए उपयोगकर्ता के उस आइडेंटिफ़ायर से मेल नहीं खाएगा जिसका इस्तेमाल Firebase Auth करता है. साथ ही, यहuser.providerData[0].uidके ज़रिए ऐक्सेस किया जा सकता है. इसके बजाय,oidदावा फ़ील्ड का इस्तेमाल किया जाना चाहिए. Azure AD किरायेदार का इस्तेमाल करके साइन-इन करने पर,oidदावा पूरी तरह से मेल खाएगा. हालांकि, नॉन-टेंटेंट के मामले में,oidफ़ील्ड में पैडिंग की जाती है. फ़ेडरेट किए गए आईडी4b2eabcdefghijklके लिए,oidमें00000000-0000-0000-4b2e-abcdefghijklफ़ॉर्म होगा.- पॉप-अप विंडो की मदद से साइन इन करने के लिए,
ऊपर दिए गए उदाहरणों में, साइन-इन फ़्लो पर फ़ोकस किया गया है. हालांकि, आपके पास
linkWithPopup/linkWithRedirectका इस्तेमाल करके, Microsoft सेवा देने वाली कंपनी को मौजूदा उपयोगकर्ता से लिंक करने का विकल्प भी होता है. उदाहरण के लिए, एक ही उपयोगकर्ता के लिए कई सेवा देने वाली कंपनियों को लिंक किया जा सकता है. इससे उपयोगकर्ता, इनमें से किसी भी कंपनी के खाते से साइन इन कर पाएगा.Web
import { getAuth, linkWithPopup, OAuthProvider } from "firebase/auth"; const provider = new OAuthProvider('microsoft.com'); const auth = getAuth(); linkWithPopup(auth.currentUser, provider) .then((result) => { // Microsoft 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('microsoft.com'); firebase.auth().currentUser.linkWithPopup(provider) .then((result) => { // Microsoft credential is linked to the current user. // IdP data available in result.additionalUserInfo.profile. // OAuth access token can also be retrieved: // result.credential.accessToken // OAuth ID token can also be retrieved: // result.credential.idToken }) .catch((error) => { // Handle error. });
इसी पैटर्न का इस्तेमाल
reauthenticateWithPopup/reauthenticateWithRedirectके साथ किया जा सकता है. इसका इस्तेमाल, संवेदनशील कार्रवाइयों के लिए नए क्रेडेंशियल पाने के लिए किया जा सकता है. इन कार्रवाइयों के लिए, हाल ही में लॉगिन करना ज़रूरी होता है.Web
import { getAuth, reauthenticateWithPopup, OAuthProvider } from "firebase/auth"; const provider = new OAuthProvider('microsoft.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('microsoft.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. // OAuth access token can also be retrieved: // result.credential.accessToken // OAuth ID token can also be retrieved: // result.credential.idToken }) .catch((error) => { // Handle error. });
Chrome एक्सटेंशन में Firebase की मदद से पुष्टि करना
अगर आपको Chrome एक्सटेंशन ऐप्लिकेशन बनाना है, तो ऑफ़स्क्रीन दस्तावेज़ों से जुड़ी गाइड देखें.
अगले चरण
जब कोई उपयोगकर्ता पहली बार साइन इन करता है, तो एक नया उपयोगकर्ता खाता बनता है. यह खाता, उस क्रेडेंशियल से लिंक होता है जिससे उपयोगकर्ता ने साइन इन किया था. जैसे, उपयोगकर्ता का नाम और पासवर्ड, फ़ोन नंबर या पुष्टि करने वाली कंपनी की जानकारी. यह नया खाता, आपके Firebase प्रोजेक्ट के हिस्से के तौर पर सेव किया जाता है. इसका इस्तेमाल, आपके प्रोजेक्ट के हर ऐप्लिकेशन में किसी उपयोगकर्ता की पहचान करने के लिए किया जा सकता है. इससे कोई फ़र्क़ नहीं पड़ता कि उपयोगकर्ता ने किस तरह से साइन इन किया है.
-
अपने ऐप्लिकेशन में, उपयोगकर्ता की पुष्टि की स्थिति जानने का सबसे सही तरीका यह है कि
Authऑब्जेक्ट पर एक ऑब्ज़र्वर सेट करें. इसके बाद, आपकोUserऑब्जेक्ट से उपयोगकर्ता की प्रोफ़ाइल की बुनियादी जानकारी मिल सकती है. उपयोगकर्ताओं को मैनेज करना लेख पढ़ें. Firebase Realtime Database और Cloud Storage सुरक्षा नियमों में, आपको ये काम करने की सुविधा मिलती है: साइन इन किए हुए उपयोगकर्ता का यूनीक User-ID,
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. });