Выйти из AdonisJS с помощью токена JWT - PullRequest
0 голосов
/ 28 сентября 2019

У меня хорошо работает метод входа в систему, который генерирует токен JWT для пользователя для аутентификации в AdonisJS.Но как я могу заблокировать этот токен в будущем, если пользователь нажмет кнопку «Выйти» или даже если я захочу заблокировать его вручную?

Я знаю, что могу просто удалить его со стороны клиента, нопроблема в том, что токен все еще остается активным (в случае, если кто-то еще украдет этот токен, например, у него все еще будет доступ к API, например).

Есть идеи, как это исправить?Спасибо

1 Ответ

1 голос
/ 29 сентября 2019

вы должны использовать Revoking Tokens в AdonisJs

Схемы jwt и api предоставляют методы для отзыва токенов с помощью интерфейса авторизации.

Для jwt, токены обновления отменяются только, поскольку фактические токены никогда не сохраняются в базе данных

revokeTokens (токены, delete = false)

Следующий метод будет отзывать токены, установив флаг втаблица токенов:

const refreshToken = '' // get it from user

await auth
  .authenticator('jwt')
  .revokeTokens([refreshToken])

Если в качестве второго аргумента передано значение true, вместо установки флага базы данных is_revoked соответствующая строка будет удалена из базы данных:

const refreshToken = '' // get it from user

await auth
  .authenticator('jwt')
  .revokeTokens([refreshToken], true)

Комуотозвать все токены, вызвать revokeTokens без аргументов:

await auth
  .authenticator('jwt')
  .revokeTokens()

При отзыве токена api для текущего пользователя, вошедшего в систему, вы можете получить доступ к значению из заголовка запроса:

// for currently loggedin user
const apiToken = auth.getAuthHeader()

await auth
  .authenticator('api')
  .revokeTokens([apiToken])
revokeTokensForUser(user, tokens, delete = false)

ThisМетод работает так же, как метод revokeTokens, но вместо этого вы можете указать пользователя самостоятельно:

const user = await User.find(1)

await auth
  .authenticator('jwt')
  .revokeTokensForUser(user)
...