我为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;
});
基本上,一旦看到在云数据库中删除了一些文档,就会将用户从身份验证服务中删除。我想退出此用户登录的所有设备的所有会话。您可以看到该用户使用电话号码连接到该应用程序。我该怎么办?
答案 0 :(得分:1)
用户登录Firebase身份验证后,他们将获得一个有效期为一小时的ID令牌。在该令牌到期之前,您无法撤消它-至少在不更改用于签署所有令牌的密钥的情况下无法撤消。
这意味着服务器无法立即终止现有会话。
立即锁定用户的常用方法是:
向客户端发送信号,告知他们需要刷新令牌,这将使这些客户端注销-并阻止其再次登录。当然,这不会阻止恶意用户尝试使用现有令牌,因此...
在执行敏感操作之前,请检查服务器端是否已停用用户帐户。您可以针对Firebase Authentication Admin SDK进行此操作,但更常见的做法是将最近停用的帐户的UID存储在您使用的数据库中,然后检入安全规则或代码。
有关此示例,请参见checking for ID token revocation上的文档。