Этот ответ относится к 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, это можно легко сделать с помощью метода заголовков адаптера .