我正在尝试在其他设备上签名时无效/撤消客户端的身份验证令牌。初始身份验证令牌是通过我们的服务器提供的,而不是firebase(但使用相同的密钥,因此也适用于firebase)。
对于每个用户,我们保存一个相关的密码,该密码作为auth-token的一部分传递,当用户切换设备时 - 我们从服务器发出一个新密码并比较密码以使服务器上的令牌无效。但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对象中没有自定义字段存在。
答案 0 :(得分:0)
您在自定义身份验证对象中放置的内容将在安全规则中可用,并且是在客户端上进行身份验证后返回的authData的一部分。在您创建JWT时,您必须遵循Firebase的特定规则outlined here。重要的一部分是d
密钥包含您想要提供的身份验证数据。这是有效载荷可能是什么样子的基本示例。
{
"v": "0",
"iat": 1448391639,
"d": {
"uid": "user1234",
"password": "mySecretPassword"
}
}
http://jwt.io/是一个很好的工具,可以快速创建JWT进行测试。如果您将上述有效负载与Firebase密钥结合使用,则应在auth数据和安全规则中看到相同的有效负载。
f.authWithCustomToken('eyJhbGciOiJIUz...', function(err, data) {
if (err) {
// Handle error
} else {
console.log(data.auth); // {uid: "userId1234", password: "mySecretPassword"}
}
});