Я разрабатывал приложение с React Native (с Expo) и Firebase на бэкэнде.Когда я запускаю проект через клиент Expo на iPhone, я обычно могу войти по электронной почте и паролю, а затем получить данные из базы данных Firebase.Но когда я захожу через Facebook, база данных читается руками, и это ничего не решает.Важные части кода выглядят следующим образом:
firebase.initializeApp(firebaseConfig);
// This works everywhere
export const login = async (email, password) => {
await firebase.auth().signInWithEmailAndPassword(email, password);
const userId = firebase.auth().currentUser.uid;
return userId + '';
};
export const loginByFacebook = async () => {
const { type, token } = await Expo.Facebook.logInWithReadPermissionsAsync(FB_APP_ID, {
permissions: ['public_profile'],
});
if (type === 'success') {
const credential = firebase.auth.FacebookAuthProvider.credential(token);
try {
await firebase.auth().signInAndRetrieveDataWithCredential(credential);
} catch (error) {
console.log('cannot login ', error);
}
}
};
export const readData = (key) => {
console.log('getWins ');
const userId = firebase.auth().currentUser.uid;
return firebase
.database()
.ref(`/${key}/${userId}`)
.once('value');
};
...
class PostList extends React.Component {
async componentDidMount() {
// it normally resolves when logged with email & password,
// resolves with facebook auth on iPhone simulator
// does not resolve with facebook auth on Expo client on iPhone
const data = await readData('posts');
}
}
Однако, что действительно странно, это то, что он не работает на клиенте iPhone + Expo, но работает на симуляторе iPhone.Важнейшая часть в async componentDidMount()
.
Конфигурация базы данных все еще находится в режиме разработки (разрешить все чтение и запись):
{
"rules": {
".read": true,
".write": true
}
}
Я использовал следующие руководства: https://docs.expo.io/versions/latest/sdk/facebook https://docs.expo.io/versions/latest/guides/using-firebase#listening-for-authentication
Есть ли еще какие-то предварительные условия, которые я забыл настроить?Или у клиента Expo есть ограничения с точки зрения правильной обработки вызовов с авторизацией в Facebook?