繁体   English   中英

firebase.auth.Auth.signInWithCredential 已弃用。 请改用 firebase.auth.Auth.signInAndRetrieveDataWithCredential

[英]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用户对象下的uidemail

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM