如何解决如何使用 JWT 在 NextAuth 中存储数据
我在确认凭据后返回以下 JSON:
{username: 'foo',name: 'bar',type: 123}
但是,由于模型限制,NextAuth不允许我存储所有字段,所以它在JWT中返回给客户端的是:
{name: 'bar',email: null,image: null}
我的[...nextauth].js 设置非常基本:
providers: [
Providers.Credentials({
async authorize(credentials) {
const res = await fetch('http://localhost:3000/api/user',{
method: 'GET',headers: {
'Accept': 'application/json','Content-Type': 'application/json','credentials': JSON.stringify(credentials)
}
})
const user = await res.json()
if (user && !user.message) {
return user
} else {
return null
}
}
})
],
我想出的唯一解决方案是使用 JSON 字符串伪造电子邮件字段,我可以在其中存储我需要的所有内容:
{name: 'bar',email: "{username: 'foo',type: 123}",image: null}
我怎样才能正确地做到这一点?我尝试研究自定义模型 (https://next-auth.js.org/tutorials/typeorm-custom-models),但似乎只与数据库有关,这不是我的情况,因为我使用 JWT 进行会话存储。 如果我继续我的解决方案,我会遇到什么缺点?
解决方法
您需要通过回调来保存附加信息,首先通过 JWT's callback,然后是 Session's callback:
callbacks: {
async jwt(token,user,account,profile,isNewUser) {
// Since you are using Credentials' provider,the data you're persisting
// _should_ reside in the user here (as far as can I see,since I've just tested it out).
// This gets called whenever a JSON Web Token is created (once) or updated
if (user?.type) {
token.status = user.type
}
if (user?.username) {
token.username = user.username;
}
return token
},async session(session,token) {
session.type = token.type;
session.username = token.username;
return session
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。