Ember Simple Auth: сеанс потерян при обновлении
Я использую Ember Simple Auth Devise v 0.6.4 в приложении Ember-cli.
Я могу войти в систему нормально, но когда я обновляю страницу, сеанс теряется. (Проверено в Firefox и Chrome.)
Сразу после входа в систему проверка localStorage показывает сеанс, а после обновления localStorage пуст.
Вот что находится в локальном хранилище при входе в систему:
4 ответа
Проблема в том, что у вас нет ни user_token
ни user_email
в сеансе, которые требуются для аутентификации сеанса. Так что, как только вы перезагрузите страницу, аутентификатор restore
Метод отклоняет сеанс. Также без user_token
а также user_email
авторизатор не собирается на самом деле авторизовать какие-либо запросы.
Вам нужно будет изменить настройки устройства на стороне сервера, как описано здесь.
Я столкнулся с той же проблемой, с простой-auth-devise.
Проблема заключалась в том, что в config/environment.js
identificationAttributeName
был отменен.
ENV['simple-auth-devise'] = {
identificationAttributeName: 'email'
};
При этом он больше не соответствует данным, возвращенным Users::SessionsController
при успешной аутентификации, взятой из файла ember-simple-auth-devise Readme:
data = {
token: user.authentication_token,
user_email: user.email
}
Имена атрибутов должны совпадать, поэтому решение заключается в использовании identificationAttributeName
в JSON, возвращаемом контроллером:
data = {
token: user.authentication_token,
email: user.email
}
Как отметил Маркоу, это все в реализации авторизатора Devise. restore()
метод.
Я испытываю ту же проблему, например, моя сессия получает ядро при обновлении.
Это нежелательное поведение, и, по крайней мере, для меня это никак не связано с настройкой устройства на стороне сервера.
На сервер не отправляются запросы, это всего лишь вопрос сохранения сеанса с помощью файлов cookie, которые должны быть проверены в первую очередь.
У меня тоже была эта проблема. Оказывается, метод восстановления в аутентификаторе не учитывал имя ресурса.
В частности, изменение строки указано здесь: https://github.com/simplabs/ember-simple-auth/blob/master/packages/ember-simple-auth-devise/lib/simple-auth-devise/authenticators/devise.js#L95
следующее:
if (!Ember.isEmpty(propertiesObject.get(_this.resourceName)[_this.tokenAttributeName]) && !Ember.isEmpty(propertiesObject.get(_this.resourceName)[_this.identificationAttributeName])) {
решил проблему.
Обратите внимание, что мое локальное хранилище выглядело так:
{"secure":{"authenticator":"simple-auth-authenticator:devise","user":{"id":1,"email":"test@gmail.com","created_at":"2015-07-20T22:30:47.966Z","updated_at":"2015-07-23T17:45:41.874Z","authentication_token":"7Uv6LysQ2h3x-P4WUMmU","token":"7Uv6LysQ2h3x-P4WUMmU"}}}
В результате для этого потребовались дополнительные изменения в config/environment.js
ENV['simple-auth-devise'] = {
identificationAttributeName: 'email',
resourceName: 'user',
tokenAttributeName: 'authentication_token',
crossOriginWhitelist: ['*']
};
Изменение bower_components/ember-simple-auth/simple-auth-devise.amd.js позволило мне увидеть, что это действительно была моя проблема.