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 позволило мне увидеть, что это действительно моя проблема.