वर्तमान में, हमारे वेब ऐप में, फायरबेस के साथ एक माइक्रोसॉफ्ट लॉगिन लागू किया गया है। अब, मैं रिएक्ट नेटिव ऐप से भी ऐसा ही करना चाहता हूं। अब तक, मैंने पाया है कि प्रतिक्रिया-मूल फायरबेस लाइब्रेरी सीधे इस प्रदाता का समर्थन नहीं करती है। साथ ही, firebase.auth.OAuthProvider('microsoft.com') नेटिव में समर्थित नहीं है।

फिर, अपने अगले प्रयास में, मैंने react-native-azure-ad-2 पैकेज के साथ Azure लॉगिन लागू किया, जो एक एक्सेस टोकन और उपयोगकर्ता का डेटा लौटाता है। अब मैं बिना किसी सफलता के फायरबेस के साथ साइन इन करने के लिए इस टोकन का उपयोग करने की कोशिश कर रहा हूं।

onMicrosoftLoginSuccess(accessToken){
    const credential = auth.OAuthProvider.credential(accessToken);
    auth().signInWithCredential(credential)
    .then(response =>{
        console.log('Respuesta firebase', response);
    })
    .catch(e =>{
        console.log('Error Firebase', e);
    })
}

इसके साथ, मुझे निम्न त्रुटि मिलती है:

Error Firebase [Error: [auth/invalid-credential] The supplied auth credential is malformed or has expired.]

कोई भी मदद सचमुच सराहनीय होगी!

1
kirhammer 1 सितंबर 2020, 00:09

1 उत्तर

सबसे बढ़िया उत्तर

तो, मुझे अंत में एक समाधान मिला। मुझे एक कस्टम टोकन का उपयोग करना था जो एक अद्वितीय आईडी (इस मामले में, माइक्रोसॉफ्ट यूआईडी) के साथ उत्पन्न होता है। टोकन को तीसरे पक्ष के पैकेज या फायरबेस-एडमिन (यानी केवल सर्वर साइड से) के साथ जेनरेट किया जा सकता है। इसलिए, मैंने फायरबेस में क्लाउड फ़ंक्शन बनाया जो माइक्रोसॉफ्ट यूआईडी और कुछ अतिरिक्त उपयोगकर्ता जानकारी लेता है और एक टोकन देता है, जैसा कि नीचे दिखाया गया है:

const tokenPromise = (data) =>{
    return new Promise((resolve, reject) =>{
        admin.auth().createCustomToken(data.uid, data.user)
        .then(response =>{
            console.log('Response', response);
            resolve(response);
        })
        .catch(error =>{
            console.log('Error', error);
            reject(error);
        })
    });
}

जेनरेट किए गए टोकन को फ़्रंट-एंड पर भेजना होगा ताकि फायरबेस प्रमाणीकरण प्रक्रिया को पूरा किया जा सके।

auth().signInWithCustomToken(tokenFromServer)
    .then(response =>{
        //response contains user data;
        //You can also access this info from
        firebase.auth().currentUser;
    })
    .catch(e =>{
        console.log('Error Firebase', e);
    });

यदि विशिष्ट पहचानकर्ता (Microsoft uid) वाला उपयोगकर्ता नया है, तो Firebase एक नया उपयोगकर्ता बनाएगा। मेरे मामले में, चूंकि हमारे पास एक वेब ऐप संस्करण है, इसका मतलब है कि यदि कोई उपयोगकर्ता example@outlook.com से लॉग इन करता है, तो फायरबेस 2 उपयोगकर्ता बनाएगा: एक माइक्रोसॉफ्ट प्रदाता के साथ लॉग इन (वेब ​​ऐप से) और दूसरा कस्टम के साथ प्रदाता (प्रतिक्रिया देशी ऐप से)।

1
kirhammer 1 सितंबर 2020, 18:28