如何在不退出的情况下更新会话值?

2024-05-07

With NextAuth.js https://github.com/nextauthjs/next-auth,如何在不注销并再次登录的情况下更新会话对象内的值?

例如,一旦用户登录,我就会使用会话中存储的 URL 来显示用户的头像。

我还提供用户更改他的头像,所以我想要session.user.image更新并持久化头像的新路径。我将所有数据存储在 MongoDB 中。我怎样才能做到这一点?目前唯一的解决方案是要求用户注销并再次登录,但这对我来说听起来不是一个可以接受的解决方案:)

我的第一个想法是在用户更新他的头像后更新此会话对象,但我不知道如何做到这一点。

import React from 'react'
import { signIn, signOut, useSession } from 'next-auth/client'

export default function Page() {
  const [ session, loading ] = useSession()

  return <>
    {session && <>
      <img src={session.user.image} />
      <button onClick={signOut}>Sign out</button>
    </>}
  </>
}

您能做的最好的事情就是在将会话数据发送到客户端之前修改数据。 通过使用 next-auth 会话回调,我们可以轻松地做到这一点。

callbacks: {
      session: async (session, user) => {
      
        const userDatabase = await CreateAccount.findOne({
          email: user.email,
        }); //finding user in DB.
        
        const userData = {
          name: userDatabase.username,
          email: userDatabase.email,
          image: userDatabase.avatar,
          id: userDatabase._id,
        } // creating payload
        
        session.user = userData; //sending payload as session
        
        return Promise.resolve(session);
      },
    },
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在不退出的情况下更新会话值? 的相关文章

随机推荐