Next-auth - 如何更新会话客户端?

Posted

技术标签:

【中文标题】Next-auth - 如何更新会话客户端?【英文标题】:Next-auth - How to update the session client side? 【发布时间】: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;
;

如何在前端刷新会话?

【问题讨论】:

【参考方案1】:

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

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

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

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

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

reloadSession();

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

【讨论】:

以上是关于Next-auth - 如何更新会话客户端?的主要内容,如果未能解决你的问题,请参考以下文章

我想使用 Next-Auth 实现会话管理系统

会话中的 Next-Auth 用户对象为其值返回 null

有没有办法在请求正文中为 Next-Auth 中的令牌调用发送客户端凭据?

如何从请求中解析 JWT 令牌 [Next-Auth]

如何保护 Next.js next-auth 中的路由?

为啥切换语言环境时我的会话没有加载?