Аутентификация сайта без пароля - PullRequest
0 голосов
/ 16 февраля 2020

Многие веб-сайты имеют систему аутентификации без пароля, т. Е. Вы можете зарегистрироваться / войти / выйти только по электронной почте, пароль не требуется.

Как реализовать такую ​​систему? (framework and language-agnosti c)

Примечание: я уже прочитал:

1 Ответ

0 голосов
/ 16 февраля 2020

Поскольку я долго искал это, вот краткое изложение, которое я публикую с помощью функции SO «Ответ на свой вопрос - Q & A-style». Я буду обновлять его как можно чаще, чтобы улучшить его.

Метод аутентификации без пароля # 1: "Нажмите на ссылку в электронном письме, которое мы только что отправили вам для входа"

Регистрация:

  • клиент заполняет форму регистрации
  • клиент AJAX POST http://example.com/_signup {email: 'test@test.com', data: 'data'}
  • сервер проверяет, существует ли пользователь
  • клиент сообщение: «Успех: электронное письмо отправлено» или «Ошибка: уже существует»
  • Сервер создает запись в БД для пользователя
  • Сервер генерирует случайный идентификатор сеанса + отправляет электронное письмо со ссылкой: http://example.com/?sessid=f65a5bc45

Вход в систему:

  • клиент заполняет форму входа
  • client AJAX POST http://example.com/_login {email: 'test@test.com'}
  • клиентское сообщение: "Электронная почта отправлена, если учетная запись существует"
  • сервер проверяет наличие электронной почты в базе данных
  • сервер генерирует случайный идентификатор сеанса + отправляет электронное письмо со ссылкой: http://example.com/?sessid=f65a5bc45

открыть ссылку:

  • клиент открывает ссылку http://example.com/?sessid=f65a5bc45
  • клиент: document.cookie = "sessid=f65a5bc45; expires=Fri, 31 Dec 9999 23:59:59 GMT" (или сделать это на стороне сервера, например, с PHP)
  • клиент: ?sessid строка запроса удалена, перейти к /

Открыть /:

  • клиент: AJAX POST example.com/_load {sessid: getCookieValue('sessid')}
  • сервер проверяет правильность sessid. в этом случае отправляет данные пользователя клиенту
  • клиент xhr.onreadystatechange: заполняет страницу данными пользователя

Метод аутентификации без пароля # 2: "Введите код в электронном письме, которое мы только что отправили вам для входа, например, 123 456 "

Регистрация:

  • клиент заполняет форму регистрации
  • клиент AJAX POST http://example.com/_signup {email: 'test@test.com', data: 'data'}
  • клиентское сообщение "Письмо отправлено, введите код здесь:" или "Ошибка: уже существует "
  • сервер создает запись в БД для пользователя
  • То же, следующий абзац, начиная с (*)

Вход в систему:

  • клиент заполняет форму авторизации
  • клиент AJAX POST http://example.com/_login {email: 'test@test.com'}
  • сообщение клиента "Электронное письмо было отправлено, если аккаунт существует, пожалуйста, введите свой код здесь: "
  • сервер проверяет, генерирует ли электронная почта в базе данных
  • (*) сервер генерирует случайное число + отправляет электронное письмо: " Вот ваш код: 123 456 "
  • клиент заполняет кодовая форма
  • клиент AJAX POST http://example.com/_login {email: 'test@test.com', code: '123456'}
  • сервер проверяет правильность кода. если это так, сервер генерирует случайный идентификатор сеанса и отправляет клиенту
  • клиент: document.cookie = "sessid=f65a5bc45; expires=Fri, 31 Dec 9999 23:59:59 GMT" (или выполните на стороне сервера с PHP)
  • клиент: перейдите к /

Открыть /:

  • клиент AJAX POST http://example.com/_load {sessid: getCookieValue('sessid')}
  • сервер проверяет правильность sessid , если это так, отправляет пользовательские данные клиенту
  • client xhr.onreadystatechange: заполняет страницу пользовательскими данными
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...