更新数据时在下一个身份验证会话中更新用户值

Posted

技术标签:

【中文标题】更新数据时在下一个身份验证会话中更新用户值【英文标题】:update the user value in the next auth session when updating data 【发布时间】:2022-01-14 20:49:33 【问题描述】:

我有一个更新用户数据的页面,一切运行正常,并且数据已随着数据库中的最新数据而更改。但是next auth session中的值没有变化,如何将新更新的用户数据与next auth session中的用户数据同步

【问题讨论】:

你解决了吗?这个网站已经死了,这个问题只有 7 次浏览 我还不能完成。现在我正在使用 id 进行欺骗,因为它的性质没有改变,但我仍然需要一个答案来解决这个案例 【参考方案1】:

首先您必须更新[...nextauth].js 上的数据 它通过服务器会话跟踪用户,但您需要来自服务器的新数据。这是我的做法:

callbacks.session = async function session( session, token ) 
  // we can fetch info from back end here to add it to the sessio
  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;
;

所以在这里,应该是旧的服务器会话被我的数据库替换。

然后,你必须在客户端更新它。

如果您单击另一个选项卡并再次单击您的选项卡,客户端的数据会更新。

这似乎没什么用,但是自动化呢?

就用这个吧:

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

直接在您的反应页面上调用它会更新所有内容。

reloadSession();

【讨论】:

以上是关于更新数据时在下一个身份验证会话中更新用户值的主要内容,如果未能解决你的问题,请参考以下文章

从会话外部更新在线用户数据(无需重新验证)

Django 用户验证

SpringWebFlux 安全性 - 在会话中更新身份验证详细信息

值更改时角度组件不更新

微服务架构的身份验证解决方案

自定义表单身份验证的表单身份验证续订问题