#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. Большое вам спасибо за то, что все прояснили! Не могли бы вы также предоставить мне источник, как добавить туда подтверждение по электронной почте?