React Native'de Firebase ile Microsoft Login nasıl uygulanır?

Sep 01 2020

Currenty, web uygulamamızda Firebase ile bir Microsoft oturum açma işlemi uygulanmaktadır. Şimdi, aynısını bir React Native uygulamasından yapmak istiyorum. Şimdiye kadar, react-native Firebase kitaplığının bu sağlayıcıyı doğrudan desteklemediğini öğrendim. Ayrıca firebase.auth.OAuthProvider('microsoft.com')yerel olarak desteklenmez.

Ardından, bir sonraki react-native-azure-ad-2denememde, bir accessToken ve kullanıcı verilerini döndüren paketle Azure oturum açma işlemini uyguladım . Şimdi bu jetonu Firebase ile oturum açmak için kullanmaya çalışıyorum ve başarılı olamadım.

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);
    })
}

Bununla aşağıdaki hatayı alıyorum:

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

herhangi bir yardım gerçekten takdir edilmektedir!

Yanıtlar

1 kirhammer Sep 02 2020 at 01:28

Böylece nihayet bir çözüm buldum. Benzersiz bir kimlik (bu durumda, Microsoft uid) ile oluşturulan özel bir belirteç kullanmak zorunda kaldım. Jeton, 3. taraf bir paketle veya firebase-admin ile (yani yalnızca sunucu tarafından) oluşturulabilir. Bu yüzden, firebase'de Microsoft kullanıcı kimliğini ve bazı ek kullanıcı bilgilerini alan ve aşağıda gösterildiği gibi bir belirteç döndüren bir bulut işlevi oluşturdum:

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);
        })
    });
}

Firebase Authentication işleminin gerçekleştirilebilmesi için, oluşturulan jetonun Ön Uca gönderilmesi gerekir.

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);
    });

Benzersiz tanımlayıcıya (Microsoft uid) sahip kullanıcı yeniyse, Firebase yeni bir kullanıcı oluşturur. Benim durumumda, bir web uygulaması sürümüne sahip olduğumuz için, bu, bir kullanıcı [email protected] ile giriş yaparsa Firebase'in 2 kullanıcı oluşturacağı anlamına gelir: biri Microsoft sağlayıcısıyla (web uygulamasından) oturum açmış ve diğeri özel sağlayıcı (react yerel uygulamasından).