【问题标题】:How to use JWT to store data in NextAuthNextAuth中如何使用JWT存储数据
【发布时间】:2021-07-09 22:14:14
【问题描述】:

我在确认凭据后返回以下 JSON:

{username: 'foo', name: 'bar', type: 123}

但是由于模型限制,NextAuth 不允许我存储所有字段,所以它在 J​​WT 中返回给客户端的是:

{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 进行会话存储。 如果我继续我的解决方案,我还会遇到什么缺点?

【问题讨论】:

    标签: json jwt next.js next-auth


    【解决方案1】:

    您需要通过回调保留附加信息,首先通过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
        }
      }
    

    【讨论】:

    猜你喜欢
    • 2021-11-14
    • 2018-06-20
    • 2017-12-25
    • 2019-08-27
    • 2019-07-06
    • 2022-12-25
    • 1970-01-01
    • 2018-05-04
    • 2021-12-07
    相关资源
    最近更新 更多