ember-simple-auth:使用自定义身份验证器在本地存储中保留会话

ember-simple-auth: Persisting session in localstorage using custom authenticator

设置:

我正在使用伪装者模拟服务器。

用例:

使用自定义身份验证器与服务器交互。

有 2 条路由:登录、受保护(默认情况下是索引、应用程序)

当我使用正确的凭据登录时,验证器的验证方法被调用并成功记录传递给 resolve() 的响应对象。

观察:

  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; 如何使会话持续存在?

我终于让所有的东西一起工作了。 Ember 2.0 和 ESA 1.0

以下是我采取的步骤:

  1. 创建一个新的 ember cli 项目
  2. 将 Ember 和 ember 数据值更新为 bower.json Source
  3. 中的 ^2.0.0
  4. 将 ESA jjAbrams 部门添加到 package.json Source
  5. 运行 npm 安装 && bower 安装

陷阱:(这是导致问题中描述的问题的原始问题)

  1. 如果您从旧版本的 ESA 升级,所有对 'simple-auth/..' 的引用都应更新为引用 'ember-simple-auth/..'。 .. 这包括 config/environment.js 文件中的身份验证器、授权器、商店、mixins 和 Config 密钥的导入。

一旦 ESA 1.0 和 Ember Cli for Ember 2.0 出来,所有这些都不应该成为问题:)