从Firebase中的auth对象获取自定义字段

从Firebase中的auth对象获取自定义字段,firebase,firebase-security,Firebase,Firebase Security,当客户端在不同的设备上登录时,我正在尝试使客户端的身份验证令牌无效/撤消。初始身份验证令牌是通过我们的服务器提供的,而不是firebase(但使用相同的密钥,因此也适用于firebase) 对于每个用户,我们保存一个关联的密码,该密码作为身份验证令牌的一部分传递,当用户切换设备时,我们从服务器发出一个新密码,并将密码与服务器上的令牌进行比较以使令牌失效。但Firebase连接仍然存在 我正在尝试为每个用户在firebase上存储密码。然后,每次我们在后端更改密码并使用它使firebase令牌无效

当客户端在不同的设备上登录时,我正在尝试使客户端的身份验证令牌无效/撤消。初始身份验证令牌是通过我们的服务器提供的,而不是firebase(但使用相同的密钥,因此也适用于firebase)

对于每个用户,我们保存一个关联的密码,该密码作为身份验证令牌的一部分传递,当用户切换设备时,我们从服务器发出一个新密码,并将密码与服务器上的令牌进行比较以使令牌失效。但Firebase连接仍然存在

我正在尝试为每个用户在firebase上存储密码。然后,每次我们在后端更改密码并使用它使firebase令牌无效时,都可以更新此密码。但是,我无法从auth对象提取密码。有什么想法吗

这是我的firebase安全规则

 {
    "rules": {

      ".read": root.child('passwords').child(auth.uid).val() == auth.password,
      ".write": root.child('passwords').child(auth.uid).val() == auth.password

   }

}

令人惊讶的是,auth对象中没有任何自定义字段。

在自定义auth对象中输入的任何内容都将在安全规则中可用,并且将成为在客户端上进行身份验证后返回的authData的一部分。在创建JWT时,必须遵循Firebase的特定规则,这些规则是。重要的一点是,
d
密钥包含要提供的身份验证数据。下面是有效载荷的基本示例

{
  "v": "0",
  "iat": 1448391639,
  "d": {
    "uid": "user1234",
    "password": "mySecretPassword" 
  }
}
是快速创建JWT进行测试的一个很好的工具。如果您将上面的有效负载与Firebase机密一起使用,您应该可以在身份验证数据和安全规则中看到相同的有效负载

f.authWithCustomToken('eyJhbGciOiJIUz...', function(err, data) {
    if (err) {
        // Handle error
    } else {
        console.log(data.auth); // {uid: "userId1234", password: "mySecretPassword"}
    }
});

我成功地使用了这种方法。您很可能没有正确创建JWT。请发布你用来创建它的代码。您是在使用FirebaseTokenGenerator库还是其他什么?谢谢Anid的回复。不,不使用FirebaseTokenGenerator,使用自定义JWT库。在ref.authWithCustomToken中传回的auth对象是否应该反映firebase正在解析的内容?如果仍然面临问题,我将再次检查并发布代码。谢谢