Ember Simple Auth: сеанс потерян при обновлении

Я использую Ember Simple Auth Devise v 0.6.4 в приложении Ember-cli.

Я могу войти в систему, но когда я обновляю страницу, сеанс теряется. (Проверено в Firefox и Chrome.)

Сразу после входа в систему проверка localStorage показывает сеанс, а после обновления localStorage пуст.

Вот что находится в локальном хранилище, когда я вхожу в систему:

введите здесь описание изображения


person niftygrifty    schedule 09.08.2014    source источник
comment
Вы используете пользовательский аутентификатор или около того? Обычно причиной таких проблем является то, что метод restore аутентификатора (github.com/simplabs/ember-simple-auth/blob/master/packages/) не восстанавливает сеанс правильно.   -  person marcoow    schedule 09.08.2014
comment
Хм... Я использую аутентификатор Devise.   -  person niftygrifty    schedule 09.08.2014
comment
Вы можете опубликовать скриншот содержимого localStorage после входа в систему?   -  person marcoow    schedule 09.08.2014
comment
Я добавил скриншот к исходному вопросу.   -  person niftygrifty    schedule 10.08.2014


Ответы (4)


Проблема в том, что у вас нет ни user_token, ни user_email в сеансе, которые необходимы для аутентификации сеанса. Поэтому, как только вы перезагрузите страницу, restoreметод отклоняет сеанс. Также без user_token и user_email авторизатор фактически не авторизует какие-либо запросы.

Вам нужно будет изменить настройку устройства на стороне сервера как описан здесь.

person marcoow    schedule 10.08.2014
comment
Это относится только к ember-simple-auth-devise? Кажется, у меня такая же проблема с использованием ember-simple-auth-token. Как только сеанс аутентифицируется, localStorage содержит правильные данные. Как только я обновляюсь, меня перенаправляют на страницу входа, а localStorage пуст. - person Riccardo Bartoli; 24.09.2014
comment
Это относится к аутентификатору устройства. Не уверен, что вы подразумеваете под ember-simple-auth-token. - person marcoow; 24.09.2014
comment
Я имею в виду ember-cli-simple-auth-token. Кстати, каждый раз, когда я перезагружаю любую защищенную страницу после успешного входа в систему, я перенаправляюсь на страницу входа, а localStorage очищается. Есть ли что-то, что я должен сделать, чтобы сделать сеанс постоянным, или он должен работать из коробки, ничего не делая? Спасибо - person Riccardo Bartoli; 24.09.2014
comment
Я думаю, вы имеете в виду ember-cli-simple-auth-oauth2. Сохранение сеанса работает из коробки. Как я сказал выше; в вашем коде вы используете неправильные имена атрибутов - каждый аутентификатор имеет определенные серверные зависимости, которые объясняются в README - person marcoow; 24.09.2014
comment
Нет, я имею в виду ember-cli-simple-auth-token, и это похоже, не имеет какого-либо конкретного имени атрибута или зависимости от сервера, поэтому, вероятно, это причина, по которой он не работает. Я посмотрю ember-cli-simple-auth-oauth2, чтобы увидеть, решит ли это мою проблему. Кстати, спасибо за этот отличный кли аддон! - person Riccardo Bartoli; 25.09.2014
comment
О, я вижу - ember-cli-simple-auth-token в настоящее время не является частью Ember Simple Auth, поэтому я не знаю о его особенностях. В какой-то момент он может быть объединен с библиотекой, но это все еще обсуждается: github .com/simplabs/ember-simple-auth/issues/287 - person marcoow; 25.09.2014

Я столкнулся с той же проблемой с simple-auth-devise.

Проблема заключалась в том, что в config/environment.js было переопределено identificationAttributeName.

ENV['simple-auth-devise'] = {
    identificationAttributeName: 'email'
};

Таким образом, он больше не соответствовал данным, возвращаемым Users::SessionsController при успешной аутентификации, взятым из файла readme ember-simple-auth-devise:

data = {
    token: user.authentication_token,
    user_email: user.email
}

Имена атрибутов должны совпадать, поэтому решение состоит в том, чтобы использовать identificationAttributeName в JSON, возвращаемом контроллером:

data = {
    token: user.authentication_token,
    email: user.email
}

Как отметил Маркоу, все дело в реализации авторизатора Devise lib/simple-auth-devise/authenticators/devise.js#L95" rel="nofollow">restore().

person ihoka    schedule 07.03.2015
comment
В следующей версии Ember Simple Auth значение по умолчанию для identificationAttributeName изменится на 'email', чтобы избежать путаницы (см. этот коммит: github.com/simplabs/ember-simple-auth/commit/) - person marcoow; 10.03.2015

Я испытываю ту же проблему, например. моя сессия сбрасывается при обновлении.

Это нежелательное поведение, и, по крайней мере, для меня это не имеет ничего общего с настройкой устройства на стороне сервера.

На сервер не отправляются никакие запросы, это просто вопрос поддержания сеанса с помощью файлов cookie, которые следует проверять в первую очередь.

person Kiffin    schedule 19.01.2015
comment
Я думаю, что это должен быть отдельный вопрос с описанием вашей собственной настройки. Кстати, я не голосовал против :) - person ; 09.02.2015

У меня тоже была эта проблема. Получается, что метод восстановления в аутентификаторе не учитывал имя ресурса.

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

person tol4trob    schedule 23.07.2015