从Firebase中的auth对象获取自定义字段
当客户端在不同的设备上登录时,我正在尝试使客户端的身份验证令牌无效/撤消。初始身份验证令牌是通过我们的服务器提供的,而不是firebase(但使用相同的密钥,因此也适用于firebase) 对于每个用户,我们保存一个关联的密码,该密码作为身份验证令牌的一部分传递,当用户切换设备时,我们从服务器发出一个新密码,并将密码与服务器上的令牌进行比较以使令牌失效。但Firebase连接仍然存在 我正在尝试为每个用户在firebase上存储密码。然后,每次我们在后端更改密码并使用它使firebase令牌无效时,都可以更新此密码。但是,我无法从auth对象提取密码。有什么想法吗 这是我的firebase安全规则从Firebase中的auth对象获取自定义字段,firebase,firebase-security,Firebase,Firebase Security,当客户端在不同的设备上登录时,我正在尝试使客户端的身份验证令牌无效/撤消。初始身份验证令牌是通过我们的服务器提供的,而不是firebase(但使用相同的密钥,因此也适用于firebase) 对于每个用户,我们保存一个关联的密码,该密码作为身份验证令牌的一部分传递,当用户切换设备时,我们从服务器发出一个新密码,并将密码与服务器上的令牌进行比较以使令牌失效。但Firebase连接仍然存在 我正在尝试为每个用户在firebase上存储密码。然后,每次我们在后端更改密码并使用它使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正在解析的内容?如果仍然面临问题,我将再次检查并发布代码。谢谢