如何在不退出的情况下更新会话值?
Posted
技术标签:
【中文标题】如何在不退出的情况下更新会话值?【英文标题】:How to update session values without signing out? 【发布时间】:2021-03-25 00:34:33 【问题描述】:使用NextAuth.js,如何在不退出并重新登录的情况下更新会话对象中的值?
例如,一旦用户登录,我就使用会话中存储的 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>
</>
</>
【问题讨论】:
嘿@Armel 你解决了这个问题吗?如果没有,我将创建一个赏金 嗨@airsoftFreak,很遗憾没有:( 【参考方案1】:一种可能的解决方案是手动更新用户对象。检查以下链接以了解下一个身份验证的回调如何工作https://next-auth.js.org/configuration/callbacks - 一种可能的方法是在 jwt()/session() 回调中更新用户并自己调整用户的信息。
目前我还没有找到触发自动更新用户对象相对于数据库的函数。
【讨论】:
【参考方案2】:在我的情况下,我在我的网站上进行 apyment 之后,我想在我执行 session.user.subscribe=true 时修改会话;如果我不重新加载页面,它的工作原理,当我重新加载页面时,我得到 previos vale subscribe=false,现在根据 ui 可以通过回调中的用户修改会话,但是我怎么知道付款已经在那些回调,我们此刻被困住了。
如果我退出并重新登录,我在会话中的订阅值将自动更新
【讨论】:
【参考方案3】:您可以做的最好的事情是在将会话数据发送到客户端之前修改数据。 通过使用 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);
,
,
【讨论】:
以上是关于如何在不退出的情况下更新会话值?的主要内容,如果未能解决你的问题,请参考以下文章
Groovy - 如何在不更新地图的情况下使用默认值获取地图值