【问题标题】:Firebase ID Token change when password reset密码重置时 Firebase ID 令牌更改
【发布时间】:2017-11-14 20:12:27
【问题描述】:

当有人登录时,我使用 Firebase ID 令牌在我的网站上显示数据。 我将令牌保存在客户端的 cookie 中,当客户端访问网站时,它会从其 cookie 文件中获取令牌并将其发送到我的后端服务器。

我想在重置密码时删除所有 ID 令牌,这样所有使用该用户名和密码登录的客户端都会断开连接。

这个选项有效吗?如果是这样,你该怎么做?他们似乎没有在他们的文档中提到它。

【问题讨论】:

  • 真的有必要将 ID 令牌存储在 cookie 中吗?用户登录 Firebase 后,您始终可以使用 firebase.auth.currentUser.getIdToken() 检索他们的 ID 令牌。您还可以管理用户离开您的站点时如何保持 Firebase 身份验证状态(请参阅firebase.google.com/docs/auth/web/auth-state-persistence)。您还没有解释您的整个用例,但是这两个项目可以让您在不使用任何 cookie 的情况下实现您想要的。
  • 这就是我当前系统的工作方式:我有 firebase 函数来监听来自我的网站的 GET 请求以获取登录输入。在他们使用 GET 请求获得电子邮件和密码后,他们从后端登录用户并仅向用户发送我选择显示的重要内容。我没有从客户端登录到firebase,登录发生在服务器端并发送到客户端。这就是我可以使用 PHP 将令牌发送到我的后端检查并发送数据的方式
  • 我有点困惑。用户是否在您的网络客户端上输入他们的 ID/密码,然后将 ID/密码传递到您的 PHP 后端,然后您的 PHP 后端将 ID/密码发送到 Firebase 函数?实际的 Firebase 身份验证发生在哪里——在 PHP 代码中还是在 Firebase 函数中?还是我完全误解了你的设置?
  • 身份验证通过 GET 请求在 firebase 函数中进行。之后,我使用一些 PHP 和另一个 GET 请求从函数中获取用户数据。

标签: firebase cookies firebase-authentication


【解决方案1】:

当用户的密码被重置、更改或关联的电子邮件被更新时,出于安全原因,Firebase 身份验证将使该用户的所有现有会话无效。从 Firebase 身份验证后端的角度来看,这有效地使该用户的 ID 令牌无效。刷新令牌也将无法颁发新的 ID 令牌。

我也同意斯科特的观点。您应该使用currentUser.getIdToken() 来获取 ID 令牌,而不是自己存储它。此 API 负责在 ID 令牌过期时为您刷新。

【讨论】:

  • 可能我的意图解释不够清楚,请看我给 Scott 的回复。
  • 我假设您将电子邮件/密码传递到您登录的 Cloud Function 端点并将 ID 令牌返回给客户端。在这种情况下,情况仍然如此:从身份验证后端的角度来看,ID 令牌将失效,但如果不添加自己的密码重置处理程序以通知后端有关失效。详细了解如何构建自己的密码重置登录页面:firebase.google.com/docs/auth/custom-email-handler
  • 问题是,ID令牌的寿命很短,我不知道我是否可以删除令牌。
  • 当您说要“删除所有 ID 令牌”和“删除令牌”时,您的意思是让它们对 Firebase 无效吗?如果是这样,那么这是正确的答案 - 每当重置密码时,Firebase 都会自行执行此操作。
  • 我试过了,它不会使它们无效。我不认为我会使用他们的 ID 令牌,因为它们也不会持续很长时间,也不会更新,不幸的是。这意味着如果我是对的,我将需要自己创建并存储它们。
猜你喜欢
  • 2019-09-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-03
  • 2021-12-29
  • 1970-01-01
  • 2017-11-27
  • 2018-03-31
相关资源
最近更新 更多