我们正在使用Firebase进行用户身份验证。你知道吗
我可以让用户在客户端登录,然后从python应用程序运行以下操作:
import firebase_admin
import firebase_admin.auth
from firebase_admin import credentials
from datetime import datetime
cred = credentials.Certificate('my_creds.json')
app = firebase_admin.initialize_app(cred)
firebase_admin.auth.revoke_refresh_tokens('some-user-id', app=app)
u = firebase_admin.auth.get_user('some-user-id')
print(datetime.fromtimestamp(u.tokens_valid_after_timestamp / 1000))
它显示当前的时间戳,至少就我所了解的managing user sessions documentation而言,它应该撤销标记。我认为应该这样做,这样我在客户端的任何进一步操作都会失败。你知道吗
然而,事实并非如此。我可以打开'some-user-id'
已登录并运行的控制台:
firebase.database().ref('some/key').once('value').then(function(snap){ console.log(snap.val()); });
过一会儿,我将很好地观察some/key
的值。你知道吗
这不好。你知道吗
当我运行firebase.auth().currentUser.reload()
时,它实际上会断开我的会话,我将无法再获得该值。但是我想在服务器端做一些事情,这样来自客户机的每个后续请求都会因为身份验证问题而失败。你知道吗
这可能吗?如果是这样,我该怎么做?你知道吗
revoke_refresh_token()
使“刷新令牌”无效。它不会使已经登录的用户会话无效。事实上,当前会话中的任何“ID令牌”都可以在一小时内保持有效(之后用户将被迫登录)。如果您想更多地了解这两种令牌之间的区别,请查看this article。你知道吗要防止使用旧(预吊销)ID令牌访问数据库,应使用Firebase安全规则。您可以将
tokens_valid_after_timestamp
写入数据库:然后实现一个规则,根据该规则检查ID令牌。你知道吗
此配置防止用户使用吊销前获得的ID令牌访问
users/{uid}
节点。你知道吗这个解决方案在documentation中概述。你知道吗
相关问题 更多 >
编程相关推荐