JWT-авторизация в виджете
История переписки в виджете хранится в localStorage браузера клиента. Если посетитель зайдет к вам на сайт из другого браузера или с другого устройства, он не увидит предыдущих сообщений. Чтобы это исправить, можно настроить синхронизацию переписки в виджете с помощью уникального идентификатора — User Token.
Для реализации функционала потребуется выполнить следующие шаги:
1. Создать уникальный ключ — secret — в соответствии со стандартом RFC 7519 длиной 256 бит.
Например, secret может выглядеть так: tye64d8818007570e9fd4e9736da383b0ee124e91e4d44ce852432456df0e986
Будет полезен ресурс jwt.io, он позволяет кодировать идентификатор в токен по стандарту JWT.
2. Указать созданный secret в нужном канале связи.
Для этого зайдите в приложение Jivo > "Управление" > "Каналы связи" > "Настроить" рядом с каналом сайта > "Настройки JWT". Изменения применятся автоматически.
3. Реализовать на вашем сайте логику генерации идентификатора для посетителя.
Идентификатор должен быть:
- уникален в рамках вашего сайта;
- статичен для посетителя;
- зашифрован по стандартам JWT с использованием secret.
Минимальный набор данных, который мы ожидаем в токене выглядит так:
payload = {
"id": "123"
}
Поле id обязательно, его значение может состоять из букв латинского алфавита и\или арабских цифр.
Важно: Поле ID должно иметь формат типа "Строка".
4. На странице вашего сайта, до начала диалога, передавать в виджет идентификатор с помощью метода jivo_api.setUserToken("token");
Пример:
Допустим, у вас на сайте есть личный кабинет: посетитель авторизуется по логину и паролю, и только после авторизации на сайте загружается виджет чата. Вы передали нам secret: X|h"33)Kn%19VejL2~4-5c3!Sm6:%[<,XCg[6=Iun0z
, при этом идентификатор вашего посетителя: Egor531
После авторизации посетителя на сайте и загрузки виджета на странице нужно вызвать метод:
jivo_api.setUserToken("eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IkVnb3I1MzEifQ.g7RHwp9z8hifPlhv3VURNHACFFAPpiHz2sOUIn3tRe8");
Указанный токен при декодировании выдаст:
payload = {
"id": "Egor531"
}
Он также будет содержать secret: X|h"33)Kn%19VejL2~4-5c3!Sm6:%[<,XCg[6=Iun0z
Когда посетитель напишет в чат, история переписки загрузится в виджет.
Как тестировать
Проверить, присвоен ли токен посетителю, можно в журнале Webhook-запросов (стоит включить Webhooks перед проверкой) в "Управление" > "Каналы связи" > "Настроить" > "Настройки интеграции для разработчиков".
В каждом событии есть поле "token". Если поле пустое, значит метод jivo_api.setUserToken
был вызван некорректно или не был вызван вовсе, либо secret, содержащийся в токене, не совпал с secret, настроенным для канала, по которому был вызван метод.
Работаем 24 часа 7 дней в неделю.