【问题标题】:How to logout all sessions once user deleted from auth firebase service?一旦用户从 auth firebase 服务中删除,如何注销所有会话?
【发布时间】:2020-08-07 13:40:37
【问题描述】:

我为 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;
});

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

【问题讨论】:

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


    【解决方案1】:

    当用户登录 Firebase 身份验证时,他们会返回一个有效期为一小时的 ID 令牌。在该令牌过期之前,无法撤销它 - 至少在不更改用于签署所有令牌的密钥的情况下是这样。

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2019-07-09
      • 1970-01-01
      • 1970-01-01
      • 2011-03-25
      • 2016-02-17
      • 2013-06-06
      • 2017-05-02
      • 2016-08-07
      相关资源
      最近更新 更多