Firebase意外地保留了onAuthStateChanged提供的匿名身份验证

时间:2016-07-03 00:52:44

标签: firebase react-native firebase-authentication

我一直在为React Native应用程序使用Firebase匿名身份验证,主要是为了确保用户只能读取/写入自己的数据(例如,在安全规则中检查auth && auth.uid

以前,使用Firebase 2.4.2,我的身份验证方案如下:

  1. 用户注册

    firebaseRef.authAnonymously((error, authData) => {
      if (error) {
        // handle error
      } else {
        // store the token on device
        store(authData.token);
      }
    });
    
  2. 每当用户稍后打开应用时,请使用存储的令牌

    创建会话
    firebaseRef.authWithCustomToken(storedToken, (error) => {
      if (error) {
        // handle errors
      } else {
        // proceed
      }
    });
    
  3. Firebase 2.4.2中匿名身份验证返回的令牌似乎适用于自定义身份验证。

    升级到Firebase 3.1后,此流程不再有效 - 具体而言,尝试使用signInWithCustomToken生成的signInAnonymously会话生成令牌会返回错误auth/invalid-custom-token

    然而,没有持久会话的问题似乎已经消失。现在,使用Firebase 3.1:

    1. 用户注册

      firebase.auth().signInAnonymously().then(user => {
        // store token
        user.getToken().then(token => store(token))
      });
      
    2. 每当用户稍后打开应用程序时,会话仍然可用,并且此侦听器被称为

      firebase.auth().onAuthStateChanged(user => {
        // user is still authenticated
      });
      
    3. 我不清楚这是如何工作的,Firebase如何坚持会议?

1 个答案:

答案 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