next.js - 如何使用 next-auth 在 Next.js 中实现凭据授权?
问题描述
我尝试使用next-auth获取凭据身份验证,但我没有使用它的经验,无论我做什么,我都会收到以下消息:
[next-auth][error][callback_credentials_jwt_error] 仅当启用 JSON Web 令牌时才支持使用凭据登录 https://next-auth.js.org/errors#callback_credentials_jwt_error
这是我的src/pages/api/auth/[...nextauth].js
文件。
import NextAuth from 'next-auth'
import Providers from 'next-auth/providers'
import User from "@models/User"
const options = {
NEXTAUTH_URL:process.env.NEXTAUTH_URL,
providers: [
Providers.Credentials({
// The name to display on the sign in form (e.g. 'Sign in with...')
name: 'Avista',
// The credentials is used to generate a suitable form on the sign in page.
// You can specify whatever fields you are expecting to be submitted.
// e.g. domain, username, password, 2FA token, etc.
credentials: {
email: {label: "Email", type: "text"},
password: {label: "Password", type: "password"}
},
authorize: async (credentials) => {
// Add logic here to look up the user from the credentials supplied
// const user = {id: 1, name: 'J Smith', email: 'jsmith@example.com'}
const user = await User.findOne()
console.log("Данные входа", credentials)
if (user) {
// Any object returned will be saved in `user` property of the JWT
return Promise.resolve(user)
} else {
// If you return null or false then the credentials will be rejected
return Promise.resolve(null)
// You can also Reject this callback with an Error or with a URL:
// return Promise.reject(new Error('error message')) // Redirect to error page
// return Promise.reject('/path/to/redirect') // Redirect to a URL
}
}
}),
Providers.Email({
server: {
host: process.env.EMAIL_SERVER_HOST,
port: process.env.EMAIL_SERVER_PORT,
auth: {
user: process.env.EMAIL_SERVER_USER,
pass: process.env.EMAIL_SERVER_PASSWORD
}
},
from: process.env.EMAIL_FROM
}),
],
// A database is optional, but required to persist accounts in a database
database: process.env.MONGO_URI,
secret: process.env.JWT_SIGNING_PRIVATE_KEY,
},
}
我不知道我做错了什么。
解决方案
尝试将此添加到您的 [...nextauth].js 页面
session: {
jwt: true,
// Seconds - How long until an idle session expires and is no longer valid.
maxAge: 30 * 24 * 60 * 60, // 30 days
},
在此处阅读有关选项的更多信息:https ://next-auth.js.org/configuration/options#jwt
推荐阅读
- java - 如何在 Android 中使用带有 if-else 语句的布尔值显示我的 TextView?
- dialogflow-es - Dialogflow:不要指望用户在没有结束对话的情况下做出回应
- c# - Dism 在 C# 的 CMD Shell 中无法识别
- scala - Seq[A]的scala自定义遍历
- javascript - 如何从 json/string 中删除特殊字符和特定单词?
- css - 强制现有网站打印移动版
- css - 使用纯 CSS 将 CSS var() 分配给另一个 CSS 元素的样式属性值?
- assembly - 了解 `lw` 和 `sw` 在 MIPS 程序中的实际工作方式
- react-native - “未定义不是函数”错误。为什么不工作?
- ui-automation - 如何在远程机器上使用 FlaUI 运行 UI 测试而不是 RDP 进入它?