第二次登录后不显示 Google 登录页面 React Native

问题描述 投票:0回答:2

我通过 React Native 开发应用程序并使用 rnfirebase 与 google firebase 身份验证连接。我已经通过像这样的谷歌按钮登录代码。

const _signIn = async () => {
setInitializing(true);
try {
  await GoogleSignin.hasPlayServices();
  const userInfo = await GoogleSignin.signIn();
  const credential = auth.GoogleAuthProvider.credential(
    userInfo.idToken,
    userInfo.accessToken,
  );
  return auth()
    .signInWithCredential(credential)
    .then(response => {
      const uid = response.user.uid;
      const data = {
        uid: uid,
        email: userInfo.user.email,
        fullname: userInfo.user.name,
        bio: 'I am ok ..',
        username: uid.substring(0, 8),
      };
      const usersRef = firestore().collection('users');
      usersRef
        .doc(uid)
        .get()
        .then(firestoreDocument => {
          if (!firestoreDocument.exists) {
            usersRef
              .doc(data.uid)
              .set(data)
              .then(() => {
                RNRestart.Restart();
              })
              .catch(error => {
                setInitializing(false);
                Alert.alert(JSON.stringify(error.message));
              });
          } else {
            setInitializing(false);
          }
        })
        .catch(error => {
          Alert.alert(JSON.stringify(error.message));
          console.log('Error getting document:', error);
        });
    });
} catch (error) {
  if (error.code === statusCodes.SIGN_IN_CANCELLED) {
    setInitializing(false);
    Alert.alert('Sign in canceled');
  } else if (error.code === statusCodes.IN_PROGRESS) {
    setInitializing(false);
    Alert.alert('Signin in progress');
  } else if (error.code === statusCodes.PLAY_SERVICES_NOT_AVAILABLE) {
    setInitializing(false);
    Alert.alert('PLAY_SERVICES_NOT_AVAILABLE');
  } else {
    setInitializing(false);
    Alert.alert(JSON.stringify(error.message));
  }
} };

在 IOS 中,当我以新/注册用户身份登录时,应用程序始终显示 google 登录页面。所以我可以选择我想使用的帐户。像这样:

enter image description here

但在 Android 中,Google 登录页面在用户首次登录时显示。之后,如果用户从应用程序注销,并且他想通过 google 按钮再次登录,则用户可以直接使用最后一个 gmail 转到主应用程序。所以在android中,如果我之前登录过,我无法切换/使用另一个帐户。

每次用户通过 Android 中的 google 按钮登录时,如何显示 google 登录页面? 谢谢你。

firebase react-native sign
2个回答
9
投票

在你的注销功能中,如果用户是通过Google登录的,你需要实现google注销功能:

GoogleSignin.signOut();

更好的方法是同时撤销访问权限,因此完整的注销功能可以是:

等待 GoogleSignin.revokeAccess();

等待 GoogleSignin.signOut();


0
投票

对于这个问题,你必须在通话前强制退出用户

{ 等待 GoogleSignin.hasPlayServices(); wait GoogleSignin.signIn();} 函数尝试这个流程

 1. await GoogleSignin.signOut()
 2. await GoogleSignin.hasPlayServices();
 2. await GoogleSignin.signIn();
© www.soinside.com 2019 - 2024. All rights reserved.