Как настроить вход покупателя для отзывов
Как включить аутентификацию покупателя в виджетах 2.0 через JWT-токен вашего сайта или одноразовый код на email
Включите аутентификацию, если оставлять отзывы, вопросы и ответы должны только покупатели, которые вошли на ваш сайт (JWT) или подтвердили email одноразовым кодом (OTP). С JWT данные покупателя попадают в отзыв из токена, и форма не просит их заполнять.
Что понадобится
- Менеджер Aplaut включил аутентификацию покупателей для вашей компании. Без этого сервер не проверяет токен.
- Секретный ключ, которым подписываются токены. Он нужен и для JWT, и для OTP.
- Company ID из раздела Настройки → Разработчикам (роль Администратор). Раньше это поле называлось Store ID.
- Доступ к коду сайта или к скрипту провайдера в разделе Виджеты.
Шаг 1. Задайте секретный ключ
Роль Менеджер или Администратор.
- Откройте Настройки → Настройки виджетов и выберите вкладку Widgets 1.0.
- В блоке Аутентификация в поле Способ аутентификации выберите Single Sign-On (SSO).
- В поле Секретный ключ (secret_key) введите ключ и нажмите Сохранить.
Раздел Настройки виджетов помечен как устаревший, но ключ для виджетов 2.0 пока задаётся здесь.
Шаг 2. Включите стратегию аутентификации
Задайте стратегию в widgetsConfig.general.authStrategy вызова aplaut.init: в коде сайта или в скрипте провайдера. В разделе Виджеты этой настройки нет.
- JWT
- OTP
aplaut.init(access_token, {
widgetsConfig: {
general: { authStrategy: "jwt" },
},
});
Пока токен не передан, кнопка Написать отзыв называется Войти. Поля имени и email в форме не показываются.
aplaut.init(access_token, {
widgetsConfig: {
general: { authStrategy: "otp" },
},
});
Поле email в форме становится обязательным: на этот адрес виджет отправляет четырёхзначный код. Подтверждение действует на одну отправку: для следующего отзыва или вопроса покупатель вводит новый код. Шаги 3–5 для OTP не нужны.
Шаг 3. Сформируйте токен на сервере
Подписывайте токен на сервере: секретный ключ не должен попадать в код страницы. Подойдёт любая JWT-библиотека с алгоритмом HS256.
| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
iss | string | да | Company ID |
external_id | string | хотя бы одно из трёх | ID покупателя на вашем сайте, как в заказах, которые вы передаёте в Aplaut |
email | string | хотя бы одно из трёх | Email покупателя |
phone | string | хотя бы одно из трёх | Телефон покупателя |
exp | number | нет | Срок действия, Unix time в секундах |
name, picture, location_name | string | нет | Имя, аватар и город: подставляются в отзыв |
custom_attributes | object | нет | Произвольные атрибуты покупателя |
order_number | string | нет | Номер заказа для метки «Проверенная покупка» |
const jwt = require("jsonwebtoken");
const token = jwt.sign(
{ iss: COMPANY_ID, external_id: user.id, email: user.email, name: user.name },
SECRET_KEY,
{ algorithm: "HS256", expiresIn: "4h" }
);
Шаг 4. Передайте токен виджетам
Вызовите aplaut.setConsumer на каждой странице с виджетами, если покупатель вошёл на сайт. Метод можно вызывать сразу после загрузчика: команда встанет в очередь.
<script>
aplaut.setConsumer({ token: "<JWT>" });
</script>
При выходе покупателя вызовите aplaut.setConsumer({ token: null }).
Для ссылок из писем токен можно передать в адресе страницы: ?consumer_token=<JWT>. Токен в адресе попадает в историю браузера и логи, поэтому для таких ссылок ставьте короткий exp.
Шаг 5. Обработайте вход по кнопке
Зарегистрируйте функцию, которая открывает вход на вашем сайте. Виджеты вызывают её перед каждым открытием формы отзыва, вопроса или ответа, даже если токен уже передан. На мобильных устройствах функция вызывается и перед открытием других выдвижных панелей, поэтому для вошедшего покупателя она должна сразу завершаться.
aplaut.setAuthParams({
callback: () =>
new Promise((resolve, reject) => {
if (isLoggedIn()) {
aplaut.setConsumer({ token: authToken });
return resolve();
}
showLoginModal()
.then((token) => {
aplaut.setConsumer({ token });
resolve();
})
.catch(reject);
}),
});
После resolve() виджет проверяет токен ещё раз и открывает форму. После reject() или исключения форма не открывается. Без функции и без токена кнопка Войти ничего не делает.
Если JWT недоступен, переключите покупателя на одноразовый код: aplaut.setAuthStrategy("otp").
Проверка результата
- Откройте страницу товара, не входя на сайт. Кнопка в виджете отзывов называется Войти, клик по ней открывает вход на вашем сайте.
- Войдите на сайт и нажмите Написать отзыв. Форма открывается без полей имени и email.
- Отправьте тестовый отзыв и найдите его в разделе Отзывы личного кабинета: у автора стоят данные из токена.
Смотрите также: справочник JS API виджетов, как включить проверку покупки и кнопку «В корзину».