持久化firebase认证状态



我正在构建一个react native应用程序,我注意到firebase默认情况下不坚持身份验证状态,因此用户必须在退出应用程序时再次登录。所以我尝试根据他们的文档手动执行,但它似乎不适合我。

这是我尝试设置持久化状态的地方

import { getAuth, signInWithEmailAndPassword, sendPasswordResetEmail, setPersistence, inMemoryPersistence} from 'firebase/auth';

onSignIn(props) {
const auth = getAuth();
const { email, password } = this.state
setPersistence(auth,inMemoryPersistence).then(() => { 
if(email.trim().length == 0 && password.trim.length == 0){
Alert.alert(
"",
"Fields can't be empty",
[

{ text: "OK") }
])
}else {

signInWithEmailAndPassword( auth, email, password)
.then((result) => {
})
.catch((error) => {
console.log(error)

})
} 
})
}

在这里检查验证状态

componentDidMount() {
firebase.auth().onAuthStateChanged((user) => {

if (!user){
this.setState({
loggedIn: false,
loaded: true,

})
}else {
this.setState({
loggedIn: true,
loaded: true,
})
}
})

请我已经在这几个星期,甚至尝试使用异步存储,但没有一个适合我。在这一点上,我真的需要帮助。谢谢你

对于那些仍然在挣扎的人,我是这样做的:

FirebaseConfig.ts

import { initializeApp} from "firebase/app";
import {  initializeAuth, getReactNativePersistence } from "firebase/auth/react-native";
import { getFirestore } from "firebase/firestore";
import AsyncStorage from "@react-native-async-storage/async-storage";
const firebaseConfig = {YOUR CONFIG};
// Initialize Firebase
export const FIREBASE_APP = initializeApp(firebaseConfig);
export const FIREBASE_AUTH = initializeAuth(FIREBASE_APP, {
persistence: getReactNativePersistence(AsyncStorage),
});
export const FIREBASE_DB = getFirestore(FIREBASE_APP);

现在正常使用signInWithEmailAndPassword函数。没有任何setPersistance

不确定这种方法是否也适用于web,可能不行。

react-native web:

import { signInWithEmailAndPassword, createUserWithEmailAndPassword, setPersistence,browserLocalPersistence} from 'firebase/auth';
import { FIREBASE_AUTH } from '../../FirebaseConfig';
setPersistence(FIREBASE_AUTH, browserLocalPersistence)

参考:https://github.com/firebase/firebase-js-sdk/issues/6050 issuecomment - 1119131377

inMemoryPersistence的文档来看,这意味着:

类型为NONE的持久化实现。

关于认证持久性类型的文档指南进一步解释为:

firebase.auth.Auth.Persistence.NONE
'none'
表示该状态将只存储在内存中,当刷新窗口或活动时将被清除。

根据上一个链接,你应该使用:

firebase.auth.Auth.Persistence.LOCAL
'local'
表明状态将保持,即使浏览器窗口关闭或活动在React Native中被销毁。需要一个明确的退出标志来清除该状态。请注意,Firebase认证web会话是单主机源,并且将仅在单个域内持久化。

所以通过检查参考文档,你会想要使用reactNativeLocalPersistence

相关内容

  • 没有找到相关文章

最新更新