Выйти с помощью FeathersJS REST API

Используя только что созданное приложение FeathersJS (локальная аутентификация), я выполняю следующие вызовы REST api со следующим поведением:

  1. ПОЛУЧИТЬ / пользователей - НЕАВТОРИЗОВАТЬСЯ с неавторизованным
  2. POST / аутентификация с именем пользователя и паролем - успешно
  3. GET / users - УСПЕШНО и возвращает список пользователей
  4. УДАЛЕНИЕ / аутентификация - возвращает объект аутентификации, сообщений об ошибках нет (и на стороне сервера генерируется событие выхода из системы)
  5. GET / users - УСПЕШНО и возвращает список пользователей

ожидаемый результат с моей стороны заключается в том, что на шаге 5 я получу неавторизованную ошибку, поскольку токен JWT истечет после выхода из системы на стороне сервера.

Что я делаю неправильно? как я могу правильно выйти из системы, используя только REST api, чтобы токен стал недействительным? или аутентификация предназначена для использования только в сочетании с клиентскими библиотеками FeathersJS?

p.s. Я пробую FeathersJS в качестве потенциального решения для backend REST API для моего приложения Flutter. Следовательно, меня интересует только реализация FeathersJS на стороне сервера.


person Martins Untals    schedule 23.11.2019    source источник
comment
Feathers auth - это НЕ сеанс, он использует токен на стороне клиента. Вызов DELETE / аутентификации существует, чтобы вы могли в своем собственном коде предпринять действия для реализации выхода на стороне сервера (например, занесение текущего токена в черный список), но он не является встроенным. Если у клиента все еще есть токен аутентификации, он будет продолжать работать до истечения срока его действия (встроен в JWT).   -  person Joe    schedule 23.11.2019
comment
Я не говорю, что это сеанс. По моему опыту работы с бэкэндами express.js, токен JWT аннулируется на стороне сервера при выходе из системы.   -  person Martins Untals    schedule 24.11.2019
comment
Feathers не делает этого автоматически. Хук удаления существует, чтобы вы могли подключить свою собственную логику для обработки недействительности / отслеживания выданных токенов на стороне сервера, но это не встроенная возможность.   -  person Joe    schedule 26.11.2019
comment
может быть, вы можете указать на документы или пример, описывающие, как использовать ловушку для удаления или аннулирования токена? Не нашел ничего, что описывало бы манипуляции со стороной сервера токенов   -  person Martins Untals    schedule 27.11.2019
comment
Нет ничего встроенного. Вы должны создать after ловушку для remove метода службы аутентификации и выполнить действие с токеном там (который должен быть в params.authentication.payload IIRC).   -  person Joe    schedule 27.11.2019


Ответы (2)


FeathersJS не имеет гражданства. Итак, в вашем клиенте просто установите для токена доступа значение null.

person Patrick Lumenus    schedule 28.11.2019
comment
если я могу спросить - как это может быть без гражданства, если FeathersJS должен проверять токен каждого клиента, тогда эти токены нужно как-то хранить в FeathersJS? Что такое государство? - person Martins Untals; 30.11.2019
comment
Предлагаю посмотреть, как работают веб-токены JSON. Да, Feathers необходимо проверять токены. Но он делает это, сериализуя данные в токене и подписывая его, используя свой секрет, прежде чем вернуть его вам (токен доступа, который вы получите). В последующих запросах вы отправляете Feathers токен доступа, на котором закодированы все данные. Затем Feathers проверяет данные, проверяя отправленный вами токен. Фактическая информация о проверке (кроме секрета) не сохраняется на сервере. Следовательно, «состояние» на сервере не сохраняется. Следовательно, Feathers, как и все другие API REST, не имеет состояния. - person Patrick Lumenus; 30.11.2019
comment
@MartinsUntals Вот довольно хорошее видео, в котором объясняется, как работает JWT и как он сравнивается с сеансами. Я думаю, что именно отсюда ваше замешательство. youtu.be/7Q17ubqLfaM Надеюсь, это поможет :) - person Patrick Lumenus; 30.11.2019

Я использую клиент socketio. Обычно я выхожу из системы, вызывая app.logout (), а затем очищая элемент localStorage перья-jwt, чтобы быть уверенным. следуйте этому https://docs.feathersjs.com/api/client/rest.html#feathersjs-rest-client, чтобы узнать, как настроить REST-клиент. Надеюсь, это поможет

person Emik lad    schedule 27.06.2020