如何使用firebase + expo在facebook认证后导航到主屏幕?

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

你好,我是新来的react native,我想用成功的认证导航到主屏幕,但这样会产生一个错误,谁能帮帮我?

loginWithFacebook = async() => {
await Facebook.initializeAsync(
  '235487284376992',
);

const { type, token } = await Facebook.logInWithReadPermissionsAsync(
  { permissions: ['public_profile'] }
);

if (type === 'success') {

  const credential = firebase.auth.FacebookAuthProvider.credential(token);
  this.props.navigation.navigate('Home')
  firebase
  .auth().signInWithCredential(credential).catch(error => {
   console.log(error);
  });

}

Firebase可以工作,但在导航过程中产生了一个错误。

登录时的错误

这个错误只发生在第一次认证之后,然后导航正常发生

react-native react-navigation
1个回答
0
投票

你使用的是 react-native-firebase你使用的是哪个版本?如果你使用的是 react-native-firebase v6+ ,你需要安装 @react-native-firebase/auth 模块.React Native Firebase第6版已经从头开始创建.而且,你必须导入。firebase 从头顶的认证模块

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

这是我的代码。

import {
  createTypes,
  createAction,
  transformNetworkError,
  socialLoginError,
} from '../../utils/actions';

import {getWithData} from '../../utils/request';
import {OneSignalUtils} from '../../utils/oneSignalUtils';
import {FirebaseUtils} from '../../utils/firebaseServices';
import { LoginManager, AccessToken } from 'react-native-fbsdk';
import { GoogleSignin } from '@react-native-community/google-signin';
import {firebase} from "@react-native-firebase/auth";

const facebookLogin = () => async dispatch => {
  const loginAction = {
    do: () => createAction(LOGIN.DO, {}),
    success: (response, authData) => createAction(LOGIN.SUCCESS, {userData: response, authData: authData}),
    failed: (error) => createAction(LOGIN.FAILED, error),
  };
  try {
    dispatch(loginAction.do());
    const result = await LoginManager.logInWithPermissions(['public_profile', 'email']);
    if (result.isCancelled) {
      dispatch(loginAction.failed(socialLoginError({status: true, message: 'Facebook login canceled.'})));
    }
    const logindata = await AccessToken.getCurrentAccessToken();
    if (!logindata) {
      dispatch(loginAction.failed(socialLoginError({status: true, message: 'Something went wrong obtaining access token.'})));
      return null;
    } else {
      const credential = firebase.auth.FacebookAuthProvider.credential(logindata.accessToken);
      const firebaseUserCredential = await firebase.auth().signInWithCredential(credential);
      const data = firebaseUserCredential.user.toJSON();
      await FirebaseUtils.userRef.doc(data.uid).set(data);
      dispatch(loginAction.success());
      return data;
    }
  } catch (e) {
    console.log('facebook login error', e);
    dispatch(loginAction.failed(socialLoginError({status: true, message: 'Something went wrong.'})));
    return null;
  }
};
© www.soinside.com 2019 - 2024. All rights reserved.