遗留Firebase文档表示可以将属性插入到数据库安全规则中使用的auth对象中。实际上,在升级到第3版之前,我在我的应用程序中已经很好地使用了这种方法。
“传递给createToken()的任何值都会附加到auth变量中,以便在安全和Firebase规则中使用。”
新的Firebase auth服务仍然允许使用自定义auth令牌,新规则文档声明:
“创建自己的自定义身份验证令牌的开发人员可以选择向这些令牌添加额外的声明。这些附加声明将出现在规则中的auth变量中。”
...and,但这并不适用于安全规则。要进行调试,在第3版中,似乎没有通过firebase访问auth对象的方法。例如,getAuth()方法似乎缺少,而且auth.getCurrentUser()方法没有返回我添加给用户的任何自定义声明,因此我不清楚它们是否存在于auth对象中。文档这里指出:
“您还可以选择指定要包含在自定义令牌中的其他声明。这些声明将在安全规则中的auth / request.auth对象中可用。”
在运行该应用程序时,在路径“/domains/mydomaincom”上的任何读/写尝试都会拒绝当前通过身份验证的用户的访问错误。
但是,我肯定会生成一个自定义签名的JWT令牌,它肯定会被Firebase自定义auth方法所接受。当我将自定义的auth服务器返回的JWT令牌有效负载粘贴到Firebase规则模拟器中时,我也确实获得了访问正确路径的规则(例如,“/domains/mydomaincom”下的所有数据)。
当我通过getCurrentUser()查看用户时,我对firebase对象没有可见性,因为它可能会出现在规则引擎中(例如,我的自定义声明似乎没有包含在currentUser对象中),所以我真的不知道如何进一步调试。
我正在特别寻找关于自定义auth的Firebase规则上还有哪些其他调试方法可用的技巧,以及/或其他人是否可以确认他们已经成功地使自定义auth属性使用了Firebase 3中的规则。
下面是自定义JWT的(安全模糊的)内容,它是从服务器端生成的令牌中解码的客户端。
{
"iss": "<client_email>",
"sub": "<client_email>",
"aud": "https://identitytoolkit.googleapis.com/google.identity.identitytoolkit.v1.IdentityToolkit",
"exp": 1463955043,
"iat": 1463951442,
"provider": "gas",
"domain": "mydomaincom",
"email": "myemail@mydomain.com",
"uid": "<FB UID HERE>",
"userGoogToken": "<LONG TOKEN HERE>",
"adminGoogToken": "<LONG TOKEN HERE>"
}以下是规则文件:
{
"rules": {
"domains": {
"$domain": {
".read": "$domain == auth.domain",
".write": "$domain == auth.domain"
}
}
}
}发布于 2016-05-27 08:44:55
根据文档,您指出可以在auth规则中使用的附加声明需要在claims属性中指定为附加索赔的映射。试试这个:
{
"iss": "<client_email>",
"sub": "<client_email>",
"aud": "https://identitytoolkit.googleapis.com/google.identity.identitytoolkit.v1.IdentityToolkit",
"exp": 1463955043,
"iat": 1463951442,
"provider": "gas",
"email": "myemail@mydomain.com",
"uid": "<FB UID HERE>",
"userGoogToken": "<LONG TOKEN HERE>",
"adminGoogToken": "<LONG TOKEN HERE>",
"claims": {
"domain": "mydomaincom"
}
}https://stackoverflow.com/questions/37379867
复制相似问题