ember-simple-auth: сохранение сеанса в локальном хранилище с использованием специального средства проверки подлинности

Настроить:

  • Ember: 2.0.2
  • Ember Data: 2.0.1
  • jQuery: 1.11.3
  • Ember Simple Auth: 1.0.0 (jjAbrams Branch)
  • Ember CLI: 1.13.8

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

USECASE:

Использование собственного аутентификатора для взаимодействия с сервером.

Есть 2 маршрута: вход в систему, защищенный (и по умолчанию индекс, приложение)

Когда я вхожу в систему с правильными учетными данными, вызывается метод аутентификации аутентификатора, и он успешно регистрирует объект ответа, который передается для разрешения ().

Замечания:

  1. После входа в систему и перенаправления на защищенную страницу, Обновление защищенного маршрута (который имеет AuthenticatedRouteMixin) приводит к странице входа.

  2. Localstorage не имеет связанных значений даже после успешного входа в систему. Перед входом в систему: ember_simple_auth:session -> {"authenticated":{}}

  3. restore() метод аутентификатора никогда не вызывается.

  4. Переход от другого маршрута к защищенному маршруту после авторизации и возвращение к странице входа снова.

//authenticators/custom.js
import Ember from 'ember';
import Base from 'ember-simple-auth/authenticators/base';


export default Base.extend({
  restore: function (data) {
    return new Ember.RSVP.Promise(function (resolve, reject) {
      console.log("RESOLVE",data);
      if (!Ember.isEmpty(data.token)) {
        //TODO Remove log

        resolve(data);
      } else {
        console.log("REJECTING",data);
        reject();
      }
    });
  },
  authenticate(credentials) {
    
    return new Ember.RSVP.Promise((resolve, reject) =>
      Ember.$.ajax({
        url: '/token',
        type: 'POST',
        data: JSON.stringify({
          email: credentials.identification,
          password: credentials.password
        }),
        contentType: 'application/json;charset=utf-8',
        dataType: 'json'
      }).then(function (response) {
        Ember.run(function () {
          //This logs the expected information
          console.log("Response", response, response.token, response.user);
          resolve(response);
        });
      }, function (xhr, status, error) {
        console.log("error", error, xhr.responseText);
        var response = xhr.responseText;
        Ember.run(function () {
          reject(response);
        });
      }));
  },

  invalidate(token) {
    return API.logout(token);
  }
});

//environment.js
ENV['ember-simple-auth'] = {
  store: 'session-store:local-storage',
  routeAfterAuthentication: '/protected'
};

TLDR; Как мне сохранить сеанс?

1 ответ

Решение

Наконец-то у меня все получилось. Ember 2.0 и ESA 1.0

Вот шаги, которые я предпринял:

  1. Создать новый Ember Cli Project
  2. Обновите значения данных Ember и ember до ^2.0.0 в bower.json Source
  3. Добавить ESA jjAbrams dep в пакет.json Source
  4. запустите npm install && bower install

Gotchas: (Это была первоначальная проблема, которая вызвала проблемы, описанные в вопросе)

  1. Если вы обновляете более старые версии ESA, все ссылки на 'simple-auth /..' должны быть обновлены, чтобы вместо них ссылаться на 'ember-simple-auth /..'.... Это включает импорт для аутентификаторов, авторизаторов, хранит, смешивает и ключ конфигурации в файле config / environment.js.

Все это не должно быть проблемой, когда выйдут ESA 1.0 и Ember Cli для Ember 2.0:)

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