ember-simple-auth:使用自定义身份验证器

时间:2015-09-30 09:22:52

标签: ember.js ember-cli ember-simple-auth

设定:

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

我正在使用pretender来模拟服务器。

USECASE:

使用自定义身份验证器与服务器连接。

有2条路线:登录,受保护(默认为索引,应用程序)

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

观察:

  1. 登录并定向到受保护的页面后,刷新受保护的路由(其中包含AuthenticatedRouteMixin)会返回登录页面。

  2. 即使成功登录,Localstorage也没有绑定到它的值。 登录前:ember_simple_auth:session -> {"authenticated":{}}

  3. restore()验证者的方法从未被调用过。

  4. 在auth之后从受保护路线前往另一条路线并再次返回登录页面。

  5. //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 个答案:

答案 0 :(得分:0)

我最后一起工作了。 Ember 2.0和ESA 1.0

以下是我采取的步骤:

  1. 创建一个新的ember cli项目
  2. 在bower.json Source中更新Ember并将数据值更改为^ 2.0.0
  3. 将ESA jjAbrams dep添加到package.json Source
  4. 运行npm install&&凉亭安装
  5. 陷阱:(这是导致问题中描述的问题的原始问题)

    1. 如果您要从旧版本的ESA升级,请参阅' simple-auth /..'应该更新以引用' ember-simple-auth /..&# 39;代替.. ..这包括config / environment.js文件中的身份验证器,授权者,商店,mixin和Config键的导入。
    2. 一旦ESA 1.0和Ember Cli for Ember 2.0问世,这一切都不应成为问题:)

相关问题