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 дней в неделю.