Как работает реализация пароля пользователя NextAuth?

#next.js #next-auth

Вопрос:

я пытаюсь реализовать аутентификацию пользователя с помощью NextAuth только по электронной почте. Я хочу, чтобы пользователи зарегистрировали учетную запись, получили письмо с подтверждением учетной записи и зарегистрировали их. Мне кажется, что это удобнее всего делать с NextAuth. Я следую этому руководству здесь: https://blog.logrocket.com/building-authorization-api-next-js/

Используя следующую аутентификацию, базу данных 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 в базе данных, затем будет отправлено электронное письмо с подтверждением, и следующий вход в систему будет работать с паролем?

Приветствия

Ответ №1:

Это сделано специально, я процитирую документы:

Поставщик услуг электронной почты использует электронную почту для отправки «волшебных ссылок», которые можно использовать для входа в систему, вы, вероятно, видели их, если раньше пользовались такими услугами, как Slack.

Так что нет, у этого провайдера нет пароля: если вы просто реализуете, что пользователям придется снова вставлять свою электронную почту, получите новую волшебную ссылку и войдите с ней в свой сеанс.

Судя по всему, вы ищете поставщика учетных данных:

Поставщик учетных данных позволяет вам выполнять вход с произвольными учетными данными, такими как имя пользователя и пароль, домен или двухфакторная аутентификация или аппаратное устройство (например, YubiKey U2F / FIDO).

Он предназначен для поддержки случаев использования, когда у вас есть существующая система, в которой вам необходимо аутентифицировать пользователей.

Вы найдете несколько примеров того, как интегрировать это с пользовательским бэкэндом, вот несколько первых результатов Google (не мои, не могу лично гарантировать ни за один из них, просто посмотрите и начните оттуда!):

Комментарии:

1. Большое вам спасибо за то, что все прояснили! Не могли бы вы также предоставить мне источник, как добавить туда подтверждение по электронной почте?