Ember Simple Auth: сеанс потерян при обновлении
Я использую Ember Simple Auth Devise v 0.6.4 в приложении Ember-cli.
Я могу войти в систему, но когда я обновляю страницу, сессия потеряна. (Протестировано в Firefox и Chrome.)
Сразу после входа в систему проверка localStorage показывает сеанс и после обновления localStorage пуст.
Вот что в локальном хранилище при входе в систему:
![enter image description here]()
Ответы
Ответ 1
Проблема заключается в том, что в сеансе нет ни user_token
, ни user_email
, которые необходимы для аутентификации сеанса. Таким образом, как только вы перезагрузите страницу, аутентификатор restore
method отклонит сеанс. Также без user_token
и user_email
authorizer не будет фактически разрешать какие-либо запросы.
Вам нужно будет изменить настройку вашей серверной разработки как описанную здесь.
Ответ 2
Я столкнулся с той же проблемой, что и для простого-auth-devise.
Проблема заключалась в том, что в config/environment.js
параметр identificationAttributeName
был переопределен.
ENV['simple-auth-devise'] = {
identificationAttributeName: 'email'
};
Таким образом, он не сопоставил данные, возвращенные Users::SessionsController
при успешной аутентификации, взятые из прошивки ember-simple-auth-devise:
data = {
token: user.authentication_token,
user_email: user.email
}
Имена атрибутов должны совпадать, поэтому решение должно использовать identificationAttributeName
в JSON, возвращаемом контроллером:
data = {
token: user.authentication_token,
email: user.email
}
Как отмечал маркоу, все это находится в реализации метода Authorization restore()
.
Ответ 3
У меня возникает одна и та же проблема, например. моя сессия становится нукли при обновлении.
Это нежелательное поведение, и для меня, по крайней мере, не имеет ничего общего с установкой на стороне сервера.
Никакие запросы не отправляются на сервер, это просто вопрос сохранения сеанса с помощью файлов cookie, которые необходимо проверить сначала.
Ответ 4
У меня тоже была эта проблема. Оказывается, что метод восстановления в аутентификаторе не учитывал имя ресурса.
В частности, изменив указанную здесь строку: 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":"[email protected]","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 позволило мне увидеть, что это действительно моя проблема.