【问题标题】:How to refresh a Firebase Session Cookie? (auth/session-cookie-expired)如何刷新 Firebase 会话 Cookie? (auth/session-cookie-过期)
【发布时间】:2020-01-28 21:29:04
【问题描述】:

我的应用程序使用服务器端 Firebase 会话 cookie。从登录到注销的一切都是在他们的official way 下实现的。但是,如果我有一段时间不使用该应用程序,会话 cookie 最终会过期。我有两个选择:

  1. 退出用户并重定向到登录页面
  2. 通过刷新服务器上的会话 cookie 以静默方式重新验证用户

没有关于选项 1 的问题。如果可能的话,我将如何使用 Firebase 实施选项 2?


  1. 我唯一拥有的是客户端和服务器上的过期会话cookie。目前,我的服务器有一个中间件,它会返回一个身份验证错误:
export default async (
  req,
  res,
  firebaseAdmin
) => {
  const { session } = req.cookies;

  if (!session) {
    return null;
  }

  const checkRevoked = true;

  return await firebaseAdmin
    .auth()
    .verifySessionCookie(session, checkRevoked)
    .then(decodedClaims => {
      return firebaseAdmin.auth().getUser(decodedClaims.uid);
    })
    .catch(error => {
      throw new AuthenticationError(error.message);
    });
};

有什么方法可以使用auth/session-cookie-expired 错误消息以静默方式重新验证用户身份?也许我一开始就不应该这样做——因为安全问题——而只选择选项 1。

【问题讨论】:

    标签: firebase session cookies firebase-authentication session-cookies


    【解决方案1】:

    我认为你可以做的是:

    • 非活动会话:如果用户在一段时间后没有访问您的站点并且会话 cookie 过期,那么您必须重新登录该用户。这是更安全的选择。
    • 活动会话:您可以不时刷新会话(活动窗口)。如果 cookie 设置为 2 周后过期。您可以每天刷新一次并在 2 周内创建一个新的 cookie(有效地延长会话)。一种方法是验证 cookie JWT,然后使用自定义令牌(使用 REST API 或客户端 Node.js)登录用户(使用相同的 uid),然后使用该 ID 令牌创建一个新的会话 cookie JWT 并给它2 周的新生命周期。

    【讨论】:

      猜你喜欢
      • 2019-03-12
      • 2020-03-25
      • 2020-10-18
      • 1970-01-01
      • 2013-06-13
      • 2016-11-08
      • 1970-01-01
      • 2016-05-06
      • 1970-01-01
      相关资源
      最近更新 更多