React Native Google Signin 使用多个帐户

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

我有一个使用Google登录的React Native应用程序。目前,我可以使用我的手机登录的Google帐户之一登录,但我需要为我的Google帐户堆栈中的另一个Google帐户执行OAuth,这是为了获得 API 访问权限,我需要辅助帐户的 serverAuthToken

我用于谷歌登录的库 - https://github.com/react-native-community/google-signin

到目前为止我所做的:

const firebaseGoogleLogin = async () => {
    try {
      await GoogleSignin.hasPlayServices();
      const userInfo = await GoogleSignin.signIn();
      if (userInfo) {
        await storeToken(userInfo);
        // eslint-disable-next-line no-console
        console.log('User info retrieved during login', userInfo);
      }
      // create a new firebase credential with the token
      // eslint-disable-next-line max-len
      const credential = firebase.auth.GoogleAuthProvider.credential(userInfo.idToken, userInfo.accessToken);
      // login with credential
      // eslint-disable-next-line no-unused-vars
      const firebaseUserCredential = await firebase.auth().signInWithCredential(credential);
      console.log('Logged in')
    } catch (error) {
      if (error.code === statusCodes.SIGN_IN_CANCELLED) {
        console.log('sign in cancelled', error);
      } else if (error.code === statusCodes.IN_PROGRESS) {
        console.log('signin in progress error', error);
      } else if (error.code === statusCodes.PLAY_SERVICES_NOT_AVAILABLE) {
        console.log('play services are not available or outdated', error);
      } else {
        console.log('some other error occurred', error);
      }
    }
  };

上述代码的结果:

这是我用来使用我的主要 Google 帐户登录的代码,登录后我触发播放服务模式以使用上述内容与其他帐户登录,但该模式会在加载一秒后关闭并关闭,向我展示

Logged in
在日志中,由于我已经登录,在播放服务中自动绕过选择帐户的选项

上述问题仅在android中出现ios似乎没问题即使使用帐户登录后

如果没有多帐户授权的方法,则试图进行黑客攻击,因为已经登录的帐户正在绕过播放服务模式,我正在考虑在用户登录我的应用程序后注销用户(进程级别)在主要活动中,我还可以使用游戏服务吗?这是正确的做法吗!

android react-native react-native-ios google-signin react-native-firebase
3个回答
14
投票

您可能已经解决了问题。我想下面的方法可以解决你的问题。注销后调用此方法。

    signOut = async () => {
      try {
        await GoogleSignin.revokeAccess();
        await GoogleSignin.signOut();
        this.setState({ user: null }); // Remember to remove the user from your app's state as well
      } catch (error) {
        console.error(error);
      }
    };

1
投票

首先从“@react-native-google-signin/google-signin”导入 { GoogleSignin };在您的注销文件中

如果您在之后使用 firbase 身份验证

   auth().signOut().then(() => {
      GoogleSignin.revokeAccess();
    }); 

0
投票

如果您使用多种方法登录并希望在注销时从应用程序注销谷歌帐户,如果用户没有通过谷歌登录登录应用程序,并且您尝试调用 GoogleSignin.revokeAccess() ,它将抛出错误: GoogleSignin.撤销错误 SIGN_IN_REQUIRED。 无论使用何种登录方式,都要安全地从 Google 注销:

const hasPreviousSignIn = async () => {
    const isSignedIn = GoogleSignin.isSignedIn();
    if (isSignedIn) {
        await GoogleSignin.signOut();
        await GoogleSignin.revokeAccess();
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.