首页 > 解决方案 > NextAuth Credentials 在成功获取数据后返回 null

问题描述

目前,我无法在我的系统中实施next-auth 凭据提供程序

我正在使用axios到不同的本地主机)来验证凭据(电子邮件和密码)。

这些是我目前面临的问题:-

  1. 成功登录后,我被重定向http://localhost:5400(空白屏幕)。即使我logout从系统中也是如此。它仍然将我重定向到相同的网址。
  2. 即使成功登录后,user返回null。我从中得到的唯一数据sessionexpires

我现在的当前代码:-

// in homepage (pages/home.js)
import { signIn, signOut, useSession } from 'next-auth/client'

export default Homepage = () => {
  const [ session ] = useSession()  
  console.log(session) 
  // returns 'null' (when not login yet)
  // returns { expires: "2021-06-28T08:59:47.504Z", user: { name: null, email: null, image: null, _proto_: Object }, _proto_: Object } after successful login  

  return (
    <>
       {!session ? 
        <>
          Sign-in to continue
          <button onClick={() => {
            signIn('credentials', 
            { 
              email: 'mohdfathi_mhdnoor@yahoo.com', 
              password: 'qwer1234', 
              callbackUrl: `${window.location.origin}/about` 
            })
            }}>SignIn</button>
        </> 
      :
        <>
          {session.user.email}
          <button onClick={() => signOut()}>SignOut</button>
        </>
      
      }
    </>
}
import axios from 'axios'
import NextAuth from 'next-auth'
import Providers from 'next-auth/providers'
import { config } from '../../../src/utils/Header'

export default NextAuth({
  providers: [
    Providers.Credentials({
      name: 'Portfolio V4 Credentials',
      credentials: {
        email: { label: "Email", type: "email", placeholder: "Please enter an email" },
        password: { label: "Password", type: "password", placeholder: "Please enter a password" }
      },
      async authorize(credentials, req) {
        try {
          const res = await axios.post(
            process.env.REACT_APP_SERVER_ENDPOINT_HOST + "/api/auth/callback/credentials", 
            { uid: '', email: credentials.email, password: credentials.password },
            config
          )
          const user = await res
          
          if (user.data.success) {
            console.log(user.data) // this logouts { success: true, data: { uid: '5f8fc26c6a103b243428bec1', sato: 1622295126589 } }
            return user.data
          }
        } catch (e) {
          console.log('Error: ')
          console.log(e)
          return null
        }
      }
    })
  ]
})

我确实将 的内容更改为user我从server. 但它根本没有反映session上面I中的内容console.log。它仍然console.log:-

{
  expires: "2021-06-28T08:59:47.504Z",
  user: {
    email: null,
    image: null,
    name: null,
    _proto_: Object
  },
  _proto_: Object
}

标签: nullnext.jsreturn-valuenext-auth

解决方案


下一个认证 | 当用户对象有太多项目时,会话请求没有数据

查看该链接下的代码。您需要的是回调函数。


推荐阅读