Я реализовал аутентификацию facebook через react-native-firebase. Когда пользователь входит в систему, он отображается как аутентифицированный с помощью Facebook на панели инструментов, и это здорово.

Моя проблема в том, что я не могу использовать firebase.auth().currentUser, чтобы получить зарегистрированного пользователя, как я смог сделать с аутентификацией по электронной почте и паролю.

Пользователь отображается как нулевой, и я не могу писать в свою базу данных (хотя он говорит, что я успешно вошел в систему).

Вот как выглядит моя функция для обработки входа в систему:

  onLoginFacebook = () => {
    LoginManager.logInWithPermissions(['public_profile', 'email'])
      .then(result => {
        if (result.isCancelled) {
          alert('cancelled');
        }
        console.log(
          `login success with permissions: ${result.grantedPermissions.toString()}`,
        );
        return AccessToken.getCurrentAccessToken();
      })
      .then(data => {
        const credential = RNFirebase.auth.FacebookAuthProvider.credential(
          data.accessToken,
        );
        return RNFirebase.auth().signInWithCredential(credential);
      })
      .then(currentFBUser => {
        console.log(`Facebook Login with user: ${JSON.stringify(currentFBUser)}`);
        //NOT WORKING 
        const {currentUser} = firebase.auth();
        const uid = currentUser.uid;
        //NOT WORKING
        firebase.auth().onAuthStateChanged(authedUser => {
          if (authedUser) {
            Actions.home();
          } else {
            Actions.checkAuth();
          }
        });
      })
      .catch(error => {
        console.log(`Login failed with ${error}`);
      });
  };

Я ценю всю помощь, которую я могу получить с этой проблемой, ура!

0
hugger 16 Дек 2019 в 04:16

1 ответ

Это то, что я сделал для реализации входа в Facebook в моем родном приложении для реагирования, я делюсь кодом ниже,

import { AccessToken, LoginManager } from "react-native-fbsdk";
import firebase from "react-native-firebase";
import axios from "axios";
import { api } from "../config/api";
import { getToken } from './auth';
import {setData} from '../modules/localCache';
import {Platform} from 'react-native';

// Calling the following function will open the FB login dialogue:
export async function facebookLogin() {

  try {
    const result = await LoginManager.logInWithPermissions([
      "public_profile",
      "email",
    ]);

    if (result.isCancelled) {
      // handle this however suites the flow of your app
      throw new Error("User cancelled request");
    }



    // get the access token
    const data = await AccessToken.getCurrentAccessToken();

    if (!data) {
      // handle this however suites the flow of your app
      throw new Error("Something went wrong obtaining the users access token");
    }

    // create a new firebase credential with the token
    const credential = firebase.auth.FacebookAuthProvider.credential(
      data.accessToken,
    );

    //firebase token --> await firebase.getToken();


    // login with credential
    const firebaseUserCredential = await firebase
      .auth()
      .signInWithCredential(credential);

    // console.warn(JSON.stringify(firebaseUserCredential.user.toJSON()));

    let responseData = await firebaseUserCredential.user.toJSON();

Здесь я получал responseData с кредитами, такими как электронная почта и идентификатор facebook. Надеюсь, поможет .

Не стесняйтесь сомнений. Поможет вам в этом.

0
Gaurav Roy 16 Дек 2019 в 08:14
Спасибо за помощь! У меня получилось как-то исправить! Теперь моя проблема заключается в удалении пользователя для повторной аутентификации перед удалением, должен ли я использовать тот же подход?
 – 
hugger
17 Дек 2019 в 03:57