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