用户从auth firebase服务删除后,如何注销所有会话?

时间:2020-08-07 13:40:37

标签: javascript firebase firebase-authentication google-cloud-functions

我为Firebase功能编写了以下代码:

exports.deleteVolunteer = functions.firestore.document(`${COLLECTION_PREFIX}/users/{userPhoneNumber}`).onDelete(async (snap, context) => {
    const userPhoneNumber = context.params.userPhoneNumber;
    try {
        const userRecord = await admin.auth().getUserByPhoneNumber(userPhoneNumber);
        await admin.auth().deleteUser(userRecord.uid);
        console.log('Successfully deleted user with phone number: ' + userPhoneNumber);
    } catch (error) {
        console.log('Failed to delete user with phone number: ' + userPhoneNumber + ' with error ' + error);
    }
    return null;
});

基本上,一旦看到在云数据库中删除了一些文档,就会将用户从身份验证服务中删除。我想退出此用户登录的所有设备的所有会话。您可以看到该用户使用电话号码连接到该应用程序。我该怎么办?

1 个答案:

答案 0 :(得分:1)

用户登录Firebase身份验证后,他们将获得一个有效期为一小时的ID令牌。在该令牌到期之前,您无法撤消它-至少在不更改用于签署所有令牌的密钥的情况下无法撤消。

这意味着服务器无法立即终止现有会话。

立即锁定用户的常用方法是:

  1. 向客户端发送信号,告知他们需要刷新令牌,这将使这些客户端注销-并阻止其再次登录。当然,这不会阻止恶意用户尝试使用现有令牌,因此...

  2. 在执行敏感操作之前,请检查服务器端是否已停用用户帐户。您可以针对Firebase Authentication Admin SDK进行此操作,但更常见的做法是将最近停用的帐户的UID存储在您使用的数据库中,然后检入安全规则或代码。

有关此示例,请参见checking for ID token revocation上的文档。