【问题标题】:Next-auth - How to update the session client side?Next-auth - 如何更新会话客户端?
【发布时间】:2022-01-21 02:28:51
【问题描述】:

我设法使用新的用户数据更新我的会话服务器端,但是在将事件分配给 [...nextauth.js] 中的会话对象后,我的会话客户端仍然是旧的。如果我使用getSession(),它不会刷新,事件。

此代码适用于后端:

callbacks.session = async function session({ session, token }) {
  // we can fetch info from back end here to add it to the session   
  session.user = token.user;
  session.jti = token.jti;

  // If user is logged, we refresh his session
  if (token?.user?.id) {
    const url = routes.api.entities.shop.get.byId.build(token?.user?.id);
    let apiResp = await axios.get(url, {});
    session.user = { ...apiResp.data };
    token.user = { ...apiResp.data };
  }

  return session;
};

如何在前端刷新会话?

【问题讨论】:

    标签: next-auth


    【解决方案1】:

    没有简单的官方方法可以做到,贡献者仍在讨论中。

    也就是说,有办法。如果您单击另一个选项卡,然后单击您的应用程序之一,Next-auth 会刷新会话。它发生了,这是一个我们可以重现的 javascript 事件。

    所以只需定义一个方法即可:

    const reloadSession = () => {
      const event = new Event("visibilitychange");
      document.dispatchEvent(event);
    };
    

    调用它,然后.. 就完成了。会话确实刷新了。

    reloadSession();
    

    更多信息,此行为来自this part of the code

    【讨论】:

      猜你喜欢
      • 2022-01-21
      • 2022-12-04
      • 2022-12-25
      • 2021-08-17
      • 2021-12-04
      • 2022-01-04
      • 2016-08-29
      • 2022-12-11
      • 2023-02-11
      相关资源
      最近更新 更多