我找到了一堆不同的文档来实现 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 导入身份验证时要小心: 是
import auth from '@react-native-firebase/auth';
而不是
import { auth } from '@react-native-firebase/auth';
问了这个很长的问题后我觉得很傻,但希望这对你们中的一些人将来有帮助。