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

Другие вопросы по тегам