Разработчик Kuzzle здесь.
Я вижу, что вы используете Javascript SDK, поэтому поведение немного отличается от использования напрямую API.
Сначала , когда вы подписываетесь на уведомления в реальном времени, Kuzzle периодически проверяет, действителен ли токен, связанный с подпиской.
Если срок действия токена истек, Kuzzle отправляет уведомление TokenExpired и не будет отправлять никаких других уведомлений для этой подписки.
SDK получит уведомление, отправит tokenExpired , а также установите для токена аутентификации экземпляра SDK значение null
, поскольку он больше не может его использовать.
Вот почему вы получаете ошибку security.rights.forbidden
в последующих вызовах, потому что вы этого не делаете иметь какой-либо токен аутентификации, поэтому Kuzzle предоставит вам права анонимного пользователя.
Когда вы используете просроченный токен аутентификации, вы должны получить сообщение об ошибке security.token.expired
. На самом деле есть ошибка, поэтому вы получаете только security.token.invalid
.
Чтобы ответить на 2 первых вопроса:
- Является ли "недействительным" ожидаемое поведение? (для токенов с истекшим сроком действия) : Нет, это скоро будет исправлено
- Почему Kuzzle выводит меня из системы из-за недействительного токена? : Недействительный токен не может предоставить права, поэтому Kuzzle возвращает error
Как восстановить истекший токен
Первое, что вы можете сделать, это предотвратить истечение срока действия токена первым способом.
Вы можете использовать auth: refreshToken , использовать auth: login с более длительным сроком действия или использовать auth: createApiKey для генерации ключа API, который никогда не истекает.
Если вам необходимо восстановить токен с истекшим сроком действия из-за того, что вы достигли срока истечения срока действия, вам необходимо снова войти в систему с помощью auth: login .
kuzzle.on('tokenExpired', () => kuzzle.auth.login(...));
В вашем случае (используйте SDK в серверном приложении) я бы рекомендовал вам пройти аутентификацию с помощью ключа API без истечения срока действия.
kuzzle.jwt = <api-key>
// further request will be authenticated with the API key user