0

我正在开发一个具有Google Loginthrough功能的应用程序Firebase。我正在尝试借助名为react-native-google-signin. 它是用于 Google 登录的 ReactNative 领域的知名库。

我的问题不在于这个库,但问题是当我使用react-native-google-signin带有 firebase 的库通过谷歌登录时。Firebase 用户并没有保持持久性,我的意思是说,当我在关闭后打开应用程序时FirebaseUser正在获取null. 在我用来通过firebase登录的代码下方,

GoogleSignin.signIn().then(data => { 
const credentials = firebase.auth.GoogleAuthProvider.credential(data.idToken, data.accessToken);

firebase.auth().setPersistence(firebase.auth.Auth.Persistence.LOCAL)
.then() => { 

    return firebase.auth().signInWithCredential(credentials);
}).catch(error => {

    console.log('Error', error);
})

}).then(user => {

   console.log('user', firebase.auth().currentUser);
}).catch(error => {

   console.log('Error', error);
})

我还检查了 Firebase Docs,尝试使用方法,但在再次打开应用程序后setPersistence()我仍然得到用户。null

4

1 回答 1

0

你可以试试这个

当您第一次打开您的应用程序时,您会得到user空值,但在登录一次后重新打开您的应用程序,您将在控制台中获得以前登录的用户

async _setupGoogleSignin() {
try {
  await GoogleSignin.hasPlayServices({ autoResolve: true });
  await GoogleSignin.configure({
    webClientId: 'YOUR WEBCLIENTID',
    offlineAccess: false
  });
  const user = await GoogleSignin.currentUserAsync();
  console.log("user",user); // HERE YOU GET LOGGED IN USER IN YOUR CONSOLE FIRST TIME IT WILL BE NULL BUT AFTER YOU GET PREVIOUSLY LOGGED IN USER
  this.setState({user});
}
catch(err) {
  console.log("Play services error", err.code, err.message);
}}

然后

_signIn() {
GoogleSignin.signIn()
.then((user) => {
  console.log(user);
  this.setState({user: user});
  const credential = firebase.auth.GoogleAuthProvider.credential(user.idToken, user.accessToken);
  // console.log(credential);
  return firebase.auth().signInAndRetrieveDataWithCredential(credential);
})
.catch((err) => {
  console.log('WRONG SIGNIN', err);
})
.done();}

它对我有用......希望它会帮助你......

于 2018-04-27T05:54:37.003 回答