next.js - NextAuth 用户密码实现如何工作?
问题描述
我正在尝试仅通过电子邮件使用 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 将哈希版本保存在数据库中的正确方法是否正确,然后将发送确认电子邮件并且下次登录使用密码登录?
问候
解决方案
这是设计使然,我将引用文档:
电子邮件提供商使用电子邮件发送可用于登录的“魔术链接”,如果您以前使用过 Slack 等服务,您可能会看到这些。
所以不,该提供程序不涉及密码:如果您只实现用户必须再次重新插入他们的电子邮件,请获取一个新的魔术链接并使用该链接登录他们的会话。
听起来,您正在寻找的是Credentials Provider:
凭据提供程序允许您使用任意凭据处理登录,例如用户名和密码、域或两因素身份验证或硬件设备(例如 YubiKey U2F / FIDO)。
它旨在支持您拥有需要对用户进行身份验证的现有系统的用例。
您会找到几个关于如何将其与自定义后端集成的示例,这里有一些 Google 的第一个结果(不是我的,不能真正亲自保证其中任何一个,只是看看然后从那里开始!):
推荐阅读
- python - Ubuntu 18.04 中 Python 3 环境中的 PyFMI
- qt - 如何在项目文件中使用环境变量的值?
- sql - 如何在 Oracle 中实现 ER 关系:一对一、一对多、多对多?
- docker - /bin/bash:第 89 行:docker:找不到命令 GITLAB CI/CD ISSUE
- javascript - 如何在 JS RESTFUL api 中使用 LIKE SQL 查询?
- jupyter-notebook - jupyter notebook markdown:在markdown单元格中添加数学运算的结果
- python - 如何在折线图上写出精确的点值?
- c# - 是否可以在不转换为 List 的情况下对 IQueryable 进行索引?
- lets-encrypt - 如何在 LetsEncrypt 的基于 ECDSA 的证书中保留 KeyUsage 和 BasicConstraints 的值?
- xml - 表达式必须对节点集求值是什么意思?