Я реализовал аутентификацию 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}`);
});
};
Я ценю всю помощь, которую я могу получить с этой проблемой, ура!
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. Надеюсь, поможет .
Не стесняйтесь сомнений. Поможет вам в этом.
Похожие вопросы
Новые вопросы
firebase
Firebase - это бессерверная платформа для унифицированной разработки приложений для мобильных устройств и для Интернета.