[英]firebase.auth.Auth.signInWithCredential is deprecated. Please use firebase.auth.Auth.signInAndRetrieveDataWithCredential instead
何时使用 this.afAuth.auth.signInWithCredential 在我的 Ionic 应用程序中一切正常。 我可以使用 Google 身份验证登录,并且用户配置文件被推送到 firebase。 但是,我在控制台中收到一个错误,即不推荐使用 signInWithCredential 并使用 signInAndRetrieveDataWithCredential。 问题是 signInAndRetrieveDataWithCredential 不提供任何用户数据(uid、用户 email、显示名称)......都是 null。
那么我能做什么呢? 控制台错误是说即使它正在工作也不要使用signInWithCredential。 signInAndRetrieveDataWithCredential 为用户返回 null。
async googleLogin(): Promise<void> { try { const gplusUser = await this.gplus.login({ 'webClientId': environment.googleWebClientId, 'offline': true, 'scopes': 'profile email' }); return await this.afAuth.auth.signInWithCredential( firebase.auth.GoogleAuthProvider.credential(gplusUser.idToken) ).then((credential) => { console.log('creds', credential); this.updateUserData(credential); }); } catch (err) { console.log(err); } } private updateUserData(user) { const userRef: firebase.firestore.DocumentReference = firebase.firestore().doc(`users/${user.uid}`); const data: User = { uid: user.uid, email: user.email, displayName: user.displayName, }; console.log('user data', data); return userRef.set(data); }
2019 年 12 月 11 日更新
请注意, signInAndRetrieveDataWithCredential()
方法已被弃用,我们需要使用signInWithCredential()
方法。
因此,代码应适用于
return this.afAuth.auth.signInWithCredential(
firebase.auth.GoogleAuthProvider.credential(gplusUser.idToken)
).then((credential) => {
console.log('creds', credential.user);
this.updateUserData(credential.user);
});
如果我正确理解您的问题,我认为您的问题来自这两种方法返回不同对象的事实:
如所解释这里, signInWithCredential()
返回一个User
对象,
尽管
如所解释这里, signInAndRetrieveDataWithCredential()
返回一个UserCredential
对象,其中包含一个User
对象。
所以你应该修改你的代码如下
....
return this.afAuth.auth.signInAndRetrieveDataWithCredential(
firebase.auth.GoogleAuthProvider.credential(gplusUser.idToken)
).then((credential) => {
console.log('creds', credential.user);
this.updateUserData(credential.user);
});
我只想澄清signInAndRetrieveDataWithCredential
,在 Firebase JS SDK 的第 6 版中已弃用signInAndRetrieveDataWithCredential
,而不是signInWithCredential
。
此外,函数signInWithCredential
现在已更新为返回UserCredential
,因此您应该能够访问UserCredential
上用户对象下的uid 、 email等
signInWithCredential 为我工作(JavaScript - 版本 9) https://firebase.google.com/docs/reference/js/auth?hl=en#signinwithcredential
import { initializeApp } from "firebase/app";
import { getAuth, GoogleAuthProvider, signInWithCredential } from "firebase/auth";
...
const app = initializeApp(firebaseConfig);
const auth = getAuth(app);
const credential = signInWithCredential(auth, credential)
.then((result) => {
const credential = GoogleAuthProvider.credentialFromResult(result);
const { user } = result;
const idToken = credential.idToken;
return { credential, idToken, user };
})
.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
// The AuthCredential type that was used.
// const credential =
// GoogleAuthProvider.credentialFromError(error)
// ...
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.