null - NextAuth Credentials 在成功获取数据后返回 null
问题描述
目前,我无法在我的系统中实施next-auth
凭据提供程序。
我正在使用axios
(到不同的本地主机)来验证凭据(电子邮件和密码)。
- Nextjs系统运行在
http://localhost:3000
- 节点服务器运行在
http://localhost:5400
这些是我目前面临的问题:-
- 成功登录后,我被重定向到
http://localhost:5400
(空白屏幕)。即使我logout
从系统中也是如此。它仍然将我重定向到相同的网址。 - 即使成功登录后,
user
返回null
。我从中得到的唯一数据session
是expires
我现在的当前代码:-
- 演示按钮调用
signIn
&signOut
:-
// 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>
</>
}
</>
}
[...nextauth].js
:-
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
}
解决方案
查看该链接下的代码。您需要的是回调函数。
推荐阅读
- database - 如何从 WSO2 EI Studio 调用外部 Rest API?
- react-native - 如何在功能组件中做同样的事情?
- spring-boot - 我可以根据来自我的控制器方法的一些信息使用 Spring 安全性为我的端点实现授权/过滤吗?
- python - 代码在 Python 3 中给出“ImportError: No module named 'file2'”,但在 Python 2.7 中完美运行
- java - 将字符串值 json 反序列化为通用 java 对象
- spring - 如何根据所选条件在字段级别进行 JSR-303 约束验证
- maven - 在代理设置后面使用 maven
- amazon-web-services - aws codebuild UPLOAD_ARTIFACTS - CLIENT_ERROR:上传工件时出错:AccessDenied:访问被拒绝状态代码:403
- laravel - 如何在查询中删除 spatie/laravel-permissions 相关数据
- sql - 对 BigQuery 分区中的行进行重复数据删除