具有自定义后端的 Next-auth 自定义身份验证提供程序
Posted
技术标签:
【中文标题】具有自定义后端的 Next-auth 自定义身份验证提供程序【英文标题】:Next-auth custom auth provider with custom backend 【发布时间】:2022-01-07 12:00:52 【问题描述】:auth 身份验证,但我遇到了会话问题
我的下一个身份验证版本是 4.0.0-beta.4(也尝试了 beta.7,结果相同)
我有自己的 JWT 令牌后端,它接受用户名和密码。并返回一个带有 accesstoken、refreshtoken、expiretime 和 resfresh-time 的对象
所以我尝试使用该后端通过 next-auth 处理会话状态。 我设法设置cookie“next-auth.session-token”。但是当我尝试获取会话时,会话总是未定义。
而且我的 Firefox 浏览器中没有任何会话。
const options =
providers: [
Credentials(
name: "Credentials",
credentials:
username:
label: "Username",
type: "text"
,
password:
label: "Password",
type: "password"
,
session:
jwt: true,
maxAge: 30 * 24 * 60 * 60 // the session will last 30 days
,
authorize: async (credentials) =>
const tokenUrl = "http://192.168.0.8:8081/api/auth/token"
const token = await fetch(tokenUrl,
method: "POST",
mode: "cors",
headers:
"Content-Type": "application/json"
,
body: JSON.stringify(
username: credentials.username,
password: credentials.password
)
)
.then(res => res.json())
console.log("token: ", token)
if (token)
const userUrl = "http://192.168.0.8:8081/admin/user/username/" + credentials.username;
const user = await fetch(userUrl,
method: "GET",
mode: "cors",
headers:
"Content-Type": "application/json",
"Authorization": "Bearer " + token.access_token
).then(res => res.json())
return
token,
user
;
else
return null;
),
],
session:
jwt: true
,
pages:
signIn: "/login",
,
secret: "TEST",
callbacks:
async jwt( token, user )
// Initial call
if (user)
return
accessToken: user.token.access_token,
accessTokenExpires: Date.now() + user.token.expire_time * 1000,
refreshToken: user.token.refresh_token,
user: user.user,
// Subsequent calls
return token;
,
async session(session)
session.name = session.token.user.fullName
session.accessToken = session.token.accessToken
session.refreshToken = session.token.refreshToken
return session;
这里我正在尝试登录后获取会话
export default function Home()
const data: session = getSession();
console.log("session: ", session)
return (
< div >
</div >
)
有什么想法吗?
【问题讨论】:
【参考方案1】:我的问题是我使用了错误的方法。我需要使用 useSession 方法而不是 getSession。然后它起作用了。 ?
【讨论】:
请详细解释你的答案。将来可能会对某人有所帮助! 如果您能提供一个完整的工作代码示例,那就太好了。另外,您如何在成功登录后发出的每个 API 请求中包含从后端获得的令牌?以上是关于具有自定义后端的 Next-auth 自定义身份验证提供程序的主要内容,如果未能解决你的问题,请参考以下文章