Вход покупателя по коду
Покупатель входит без пароля: вводит почту, получает письмо с шестизначным кодом и вводит код на сайте. Работает в любом магазине платформы, витрине нужны две мутации Shop API.
Как это работает
Заголовок раздела «Как это работает»-
Витрина вызывает
requestLoginCode(email). Сервер платформы отправляет письмо с кодом. -
Покупатель вводит код. Витрина вызывает
authenticateсо стратегиейemail_code. -
В ответе — текущий пользователь, а в заголовке
vendure-auth-token— токен сессии. Сохраните его, как описано в Shop API.
mutation RequestLoginCode($email: String!) { requestLoginCode(email: $email) { success reason retryAfter }}
mutation LoginWithEmailCode($email: String!, $code: String!) { authenticate(input: { email_code: { email: $email, code: $code } }) { __typename ... on CurrentUser { id identifier } ... on ErrorResult { errorCode message } }}В SDK это RequestLoginCodeDocument и LoginWithEmailCodeDocument.
authenticate отправляйте в текущей сессии покупателя: вход привязывается к
ней, и корзина гостя переходит в аккаунт.
Кого впускает код
Заголовок раздела «Кого впускает код»Код доказывает, что почта принадлежит покупателю, поэтому:
- есть аккаунт с этой почтой — вход в него;
- человек раньше заказывал гостем — аккаунт создаётся у того же покупателя, и его прошлые заказы сразу видны в профиле;
- никого нет — регистрируется новый покупатель.
Отдельной регистрации с паролем витрине не нужно.
Код и лимиты
Заголовок раздела «Код и лимиты»| Правило | Значение |
|---|---|
| Длина кода | 6 цифр |
| Срок жизни | 10 минут |
| Неверных попыток на код | 5, потом код гаснет даже для верного ввода |
| Действует | только последний выданный код, прежние гаснут |
| Повторное письмо | не раньше чем через 60 секунд |
| Писем на одну почту | 5 в час и 10 в сутки |
Лимиты писем считаются по почте на всей платформе, а не в одном магазине: аккаунт покупателя общий, и раздельные лимиты умножали бы число попыток подбора на число магазинов. В базе хранится только хеш кода с солью.
Ответ requestLoginCode
Заголовок раздела «Ответ requestLoginCode»reason |
Что значит | Что показать |
|---|---|---|
— (success: true) |
Письмо отправлено | Поле для кода |
INVALID_EMAIL |
Почта указана неверно | Попросить проверить почту |
TOO_SOON |
Код уже отправлен меньше минуты назад | Таймер на retryAfter секунд |
TOO_MANY |
Исчерпан лимит в час или в сутки | «Попробуйте позже», retryAfter — через сколько секунд |
NOT_CONFIGURED |
Отправка писем на платформе не настроена | Сообщение об ошибке магазина |
SEND_FAILED |
Письмо не ушло | «Попробуйте позже» |
authenticate с неверным, просроченным или погасшим кодом возвращает
INVALID_CREDENTIALS_ERROR.
Письмо с кодом
Заголовок раздела «Письмо с кодом»Тема письма — «123456 — код для входа в <название магазина>». Код —
секрет, поэтому письмо всегда уходит с общего адреса платформы от имени
магазина, даже если у магазина подключён свой почтовый ящик. Письма о
заказах, наоборот, идут со своего ящика магазина, если он подключён.