我一直在为React Native应用程序使用Firebase匿名身份验证,主要是为了确保用户只能读取/写入自己的数据(例如,在安全规则中检查auth && auth.uid
)
以前,使用Firebase 2.4.2,我的身份验证方案如下:
用户注册
firebaseRef.authAnonymously((error, authData) => {
if (error) {
// handle error
} else {
// store the token on device
store(authData.token);
}
});
每当用户稍后打开应用时,请使用存储的令牌
创建会话firebaseRef.authWithCustomToken(storedToken, (error) => {
if (error) {
// handle errors
} else {
// proceed
}
});
Firebase 2.4.2中匿名身份验证返回的令牌似乎适用于自定义身份验证。
升级到Firebase 3.1后,此流程不再有效 - 具体而言,尝试使用signInWithCustomToken
生成的signInAnonymously
会话生成令牌会返回错误auth/invalid-custom-token
。
然而,没有持久会话的问题似乎已经消失。现在,使用Firebase 3.1:
用户注册
firebase.auth().signInAnonymously().then(user => {
// store token
user.getToken().then(token => store(token))
});
每当用户稍后打开应用程序时,会话仍然可用,并且此侦听器被称为
firebase.auth().onAuthStateChanged(user => {
// user is still authenticated
});
我不清楚这是如何工作的,Firebase如何坚持会议?
答案 0 :(得分:2)
在Firebase JavaScript SDK版本2.x上运行React Native,但会话信息在运行之间不会保留。这样做的原因是React Native中没有本地存储(Firebase用于在浏览器中保存此信息)。
在Firebase JavaScript SDK 3.0版中,身份验证不再适用于React Native。
从Firebase JavaScript SDK 3.1版开始,身份验证再次在React Native上运行。会话详细信息保留在React Native's Async Storage。
中