我试图实现用户身份验证与NextAuth与电子邮件。我想让用户注册一个帐户,得到一个帐户验证邮件和注册他们。这似乎是最方便的我做它与NextAuth。我在这里遵循这个指南:https://blog.logrocket.com/building-authorization-api-next-js/
使用Next Auth,一个postgresql数据库(带prisma)和JWT。现在按照指南设置电子邮件提供者
// pages/api/auth/[…nextauth].js
// ...other imports
import Providers from 'next-auth/providers'
const options = {
site: process.env.NEXTAUTH_URL,
providers: [
Providers.Email({
server: {
port: 465,
host: 'smtp.gmail.com',
secure: true,
auth: {
user: process.env.EMAIL_USERNAME,
pass: process.env.EMAIL_PASSWORD,
},
tls: {
rejectUnauthorized: false,
},
},
from: process.env.EMAIL_FROM,
})
],
database: process.env.DATABASE_URL
}
我很新的,所以请不要冒犯我问这个问题,但我想知道如何登录然后?在指南中,他们说如果我们第一次注册,我们会收到一封确认邮件,然后我们就可以开始我们的课程了。但是如果用户想稍后登录怎么办?他从未定义过任何密码。在注册步骤中要求密码并在数据库中保存带有bcrypt的散列版本是正确的方法吗?然后将发送确认电子邮件,下一次登录将使用密码登录?
的问候这是设计,我将引用文档:
Email provider使用Email发送"魔法链接";这是可以使用的登录时,如果您使用过服务,您可能会看到这些
所以,不,没有密码涉及到该提供者:如果你只是实现用户将不得不重新插入他们的电子邮件,获得一个新的魔法链接,并登录与他们的会话。
你要找的,听起来,是凭据提供者:
凭据提供程序允许您处理登录任意凭据,例如用户名和密码、域或两个因素认证或硬件设备(如YubiKey U2F/FIDO)。
它旨在支持您拥有现有系统的用例您需要对用户进行身份验证。
你会发现一些关于如何将它与自定义后端集成的例子,这里是一些谷歌的第一个结果(不是我的,我不能保证他们中的任何一个,只是看看,从那里开始!):
- https://dev.to/twisha/using-credentials-provider-with-a-custom-backend-in-nextauth-js-43k4
- https://dev.to/dawnind/authentication-with-credentials-using-next-auth-and-mongodb-part-1-m38
- https://blog.boardiesitsolutions.com/implementing-credentials-provider-on-nextjs-and-nextauth/