【问题标题】:Pass more data to session in Next-auth在 Next-auth 中将更多数据传递给会话
【发布时间】:2022-09-30 21:18:59
【问题描述】:

我们正在我们的网站上进行 OTP 身份验证。因此,为了获得授权,访问者在输入中输入他的电话号码,我们向他发送一个 OPT 号码,他再次输入发送的选项,然后如果匹配,我们向他发送他的帐户凭据(令牌,用户 ID)(如果存在)或者我们创建新的,我们希望使用 next-auth 在会话中保存该凭据。

这是我到目前为止的地方:

export default NextAuth({
  providers: [
    CredentialsProvider({
      credentials: {
        phoneNumber: { label: \'PhoneNumber\', type: \'text\' },
        code: { label: \'Code\', type: \'text\' },
        type: { label: \'Type\', type: \'text\' },
      },
      async authorize(credentials, req) {
        const user_needs = await requests.auth.signInEnterOtp(
          credentials.phoneNumber,
          credentials.code,
          credentials.type
        )
        return user_needs.ok ? true : null
      },
    }),
  ],
  callbacks: {
    async session({ session, user, token }) {
      return session
    },
  },
  secret: process.env.JWT_SECRET,
})

我需要在会话中保存user_needs,但我怎样才能将它通过authorize 传递给session

我尝试在authorize 中返回user_need,但它没有传递给session 回调。

  • 您可以从authorize 返回一个用户对象,该对象将传递给jwtsession 回调。
  • 我试过了,但在session 回调中一无所获,你能告诉我代码作为答案吗?

标签: next.js next-auth


【解决方案1】:

最终我发现它是这样的:

async authorize(credentials, req) {
 const res = fetchUserInfo(credentials.opt)
 if(res.ok) return {user: res.data}
 return null
},
callbacks: {
 async jwt({ token, user }) {
  return { ...token, ...user }
 },
  async session({ session, user, token }) {
  return token
 },
},

【讨论】:

  • 谢谢,所有其他人的答案都不像你的那样清楚。
  • @A.Anvarbekov 我确实有包含“用户的所有设置”的大型用户对象,因此它在从 jwt 回调传递 ...user 时抛出“431 Request Header Fields Too Large”。
  • @NimeshVaghasiya 会话有限制,将所有信息存储到它不是一个好主意。而是在会话中存储较少的用户信息并创建一个 api 端点,该端点带来所有信息并创建一个挂钩 useUser 获取 api 并返回它
  • @A.Anvarbekov 谢谢,我正在寻找用户设置 api 应该只在用户登录后调用一次,然后将设置共享到所有应用程序页面(nextjs)的东西。是否可以使用 useUser 挂钩?
  • @NimeshVaghasiya 同样的想法。例如,在单击登录按钮并查看 200 状态代码后的登录页面中,从 api 获取用户设置并保存到本地存储,或者我通常使用带有 useUser 钩子的 swr 或 react-query
【解决方案2】:

A.Anvarbekov,我认为它有效,但也许在回调中我们还应该传递其他会话属性?就像是:

 async session({ session, token }) {
  return {
   ...session,
   user:{...token.user}
 },

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-12-25
    • 2021-08-17
    • 2022-12-11
    • 1970-01-01
    • 2022-01-21
    • 2021-12-30
    • 1970-01-01
    • 2017-10-26
    相关资源
    最近更新 更多