Пользователь входит в систему с помощью электронной почты/пароля ИЛИ социальных сетей (Google/Facebook)
Если вход через социальную сеть - > прямая аутентификация
Если адрес электронной почты/пароль -> проверьте, подтвержден ли адрес электронной почты
Если подтвержден -> аутентифицируйте
Если не подтвержден -> отправьте OTP и перенаправьте на страницу подтверждения
Вот основные препятствия, с которыми я столкнулся:
NextAuth не поддерживает поток проверки OTP «из коробки». Пришлось взломать кодами статуса:
Код: Выделить всё
Credentials({
async authorize(credentials) {
const res = await fetch("/api/login", {
method: "POST",
body: JSON.stringify(credentials)
});
const data = await res.json();
// Hacky way to handle unverified emails
if (res.status === 403) {
return {
status: "not-verified",
user: data.user,
error: "Please verify email"
};
}
}
})
Код: Выделить всё
// verify-otp page
const { update } = useSession();
const handleVerify = async () => {
const res = await verifyOtp();
if (res.ok) {
// Updates client but server session remains unchanged!
await update({ status: "authorized" });
}
};

Я тут в тупике. Может ли кто-нибудь помочь мне добиться этого с помощью NextAuth или мне следует просто отказаться от всего и создать аутентификацию с нуля? Буду очень признателен за любую помощь или указания!
Вот мой текущий код, если это поможет:
github gist
И извините за мою ошибку английский.
Подробнее здесь: https://stackoverflow.com/questions/793 ... ation-flow