更新数据时在下一个 auth 会话中更新用户值

Jov*_*nka 5 authentication session next.js next-auth

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

Yoa*_*net 5

首先,您必须更新数据,[...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;
};
Run Code Online (Sandbox Code Playgroud)

所以在这里,本应是服务器旧会话的会话被我的数据库会话所取代。

然后,您必须更新它的客户端。

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

看起来没什么用,但是自动化怎么样?

只需使用这个:

const reloadSession = () => {
  const event = new Event("visibilitychange");
  document.dispatchEvent(event);
};
Run Code Online (Sandbox Code Playgroud)

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

reloadSession();
Run Code Online (Sandbox Code Playgroud)