Аутентификация JWT с помощью Rails и Ember JS - PullRequest
0 голосов
/ 10 сентября 2018

Как правильно выполнить действие по выходу пользователя из системы при использовании JWT, Rails API и интерфейсной среды JS, например Ember JS? Что я на самом деле делаю:

  • использовать Rails 5.2 в качестве API
  • используйте Ember JS 3.3 в качестве интерфейса
  • использовать Ember Simple Auth в качестве дополнения OAuth
  • пример приложения , его ветвь master , работает по мере необходимости
  • пример приложения, без ветки входа не удается выйти из системы пользователя
  • проверять наличие и передавать токен в каждом запросе между Rails API и приложениями Ember JS.

У меня есть следующие вопросы:

  • Должен ли я сохранять значение токена в бэкэнд-модели (например, «Пользователь»)? Мне нужно сделать еще один запрос в фоновом режиме на стороне сервера.

  • Должен ли я установить значение токена на nil, когда пользователь выходит из системы в бэкэнде?

  • Что я делаю не так с ESA в отношении действия выхода из системы?

  • Фактически значение токена хранится в файле cookie на стороне клиента (см. https://github.com/simplabs/ember-simple-auth для более подробной информации). Я следовал их инструкциям и приложению dummy , которое они предоставляют.

  • У меня также было обсуждение на форуме Ember JS, и я пытался следовать некоторым советам и советам, но безуспешно.

Спасибо.

1 Ответ

0 голосов
/ 11 сентября 2018

Этот ответ относится к Ember 1.13, по крайней мере, 3.x.

Аутентификация бывает настолько разнообразной, что я думаю, что правильный способ сделать это - это то, что легко понять с помощью спиныend.

Поскольку ваш JWT находится в файле cookie, давайте подумаем об этом файле cookie как об источнике правды.Вместо того, чтобы делать что-то сложное для анализа cookie в хуке модели, вы можете определить Сервис, который имеет функции для захвата cookie, его синтаксического анализа и либо сохранения результатов в значениях сервиса, либо возврата необходимых значений.

Это дает вам несколько преимуществ.Вы можете получить значения из любого места в вашем приложении, включая адаптеры, и всю логику аутентификации в одном месте.С другой стороны, вам придется самостоятельно обрабатывать асинхронное поведение (т. Е. Если маршрут зависит от наличия информации для входа в систему, вам придется управлять порядком операций между аутентификацией и переходами маршрута).

Ember Simple Auth довольно популярен из-за этой проблемы.Хотя в файлах cookie нет встроенных функций JWT, если у вас есть приложение с различными состояниями, основанными на вошедшем в систему поведении, его изучение может быть хорошим вложением.

Пользовательская модель является своего рода промежуточным звеном между сервисом, созданным вручную, и Ember Simple Auth, поскольку вы можете получить пользовательскую модель и полагаться на нее во всем приложении, а также получить небольшую помощь по асинхронности.Только будьте осторожны, чтобы не разбросать ваш код авторизации по всему вашему приложению.

Наконец, чтобы вызвать выход из системы, я бы создал функцию, которая уничтожает куки-файл, установив максимальный возраст / срок действия , например, ,Если вы обрабатываете аутентификацию в службе, это означает, что вы можете использовать Служба маршрутизатора , а затем transitionTo страницу входа.Если вы используете Ember Simple Auth, эта функциональность может попасть в invalidate хук вашего собственного аутентификатора.Пример:

invalidate () {this._super () document.cookie = "some_token_name =; expires = Четверг, 18 декабря 2013 12:00:00 UTC; путь = /" return Promise.resolve ();}

Наконец, для передачи токена для аутентификации запросов, если вы используете Ember Data, это можно легко сделать с помощью метода заголовков адаптера .

...