如何使用firebase在Expo React Native应用程序中实现GoogleSignIn

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

我找到了一堆不同的文档来实现 GoogleSignIn。

世博文档

使用 Google SignIn doc 进行原生反应(我认为无需使用 firebase)

Firebase Auth 文档(显示每个平台的多个 api 文档)

React Native 文档(使用 firebase,这个似乎与我更相关)

所有这些都非常令人困惑,我已经做过和撤消了好几次事情。 我终于和最后一个一起跑了:
使用“@react-native-firebase/auth”包似乎是实现它的好方法。

流程如下:

First :显示 google 登录按钮并从 GoogleSignIn lib 获取第一个 idToken

import {
  GoogleSignin,
  GoogleSigninButton,
} from '@react-native-google-signin/google-signin';
import { auth } from '@react-native-firebase/auth';

GoogleSignin.configure({
  webClientId: 'my-web-client-id-from-firebase',
});

const onGoogleButtonClick = async () => {
       await GoogleSignin.hasPlayServices({ showPlayServicesUpdateDialog: true });
       // Get the users ID token
       const { idToken } = await GoogleSignin.signIn();    
...

然后使用 google idToken 获取凭证并登录 firebase :

// Create a Google credential with the token
const googleCredential = auth().GoogleAuthProvider.credential(idToken);

// Sign-in the user with the credential
return auth().signInWithCredential(googleCredential);

此登录调用应触发 onAuthStateChanged,并包含登录用户信息。 (包括要在服务器端验证的 firebase idToken ?)

  useEffect(() => {
    const subscriber = auth().onAuthStateChanged(onAuthStateChanged);
    return subscriber; // unsubscribe on unmount
  }, []);

我还没有尝试这一点,因为我无法正确导入“auth”对象。 医生说:

import { auth } from '@react-native-firebase/auth';

auth().signInWithCredential ... 

触发此错误:

TypeError:0,_auth.auth 不是一个函数(未定义)

我尝试了不同的方法来导入它,阅读这篇文章 没有成功。

感谢您的帮助。

firebase react-native expo google-signin
1个回答
0
投票

我在写问题时找到了解决方案:

从 firebase 导入身份验证时要小心: 是

import auth from '@react-native-firebase/auth';

而不是

import { auth } from '@react-native-firebase/auth';

问了这个很长的问题后我觉得很傻,但希望这对你们中的一些人将来有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.