首页 > 解决方案 > 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 将哈希版本保存在数据库中的正确方法是否正确,然后将发送确认电子邮件并且下次登录使用密码登录?

问候

标签: next.jsnext-auth

解决方案


这是设计使然,我将引用文档

电子邮件提供商使用电子邮件发送可用于登录的“魔术链接”,如果您以前使用过 Slack 等服务,您可能会看到这些。

所以不,该提供程序不涉及密码:如果您只实现用户必须再次重新插入他们的电子邮件,请获取一个新的魔术链接并使用该链接登录他们的会话。

听起来,您正在寻找的是Credentials Provider

凭据提供程序允许您使用任意凭据处理登录,例如用户名和密码、域或两因素身份验证或硬件设备(例如 YubiKey U2F / FIDO)。

它旨在支持您拥有需要对用户进行身份验证的现有系统的用例。

您会找到几个关于如何将其与自定义后端集成的示例,这里有一些 Google 的第一个结果(不是我的,不能真正亲自保证其中任何一个,只是看看然后从那里开始!):


推荐阅读