Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript EAK和ember简单身份验证自定义验证器 我试图通过使用EAK将一个快速和肮脏的基础应用到一个应用程序中。authenticate函数按预期工作:它查找匹配的电子邮件,并在找到时解析承诺_Javascript_Ember.js_Ember App Kit_Ember Simple Auth - Fatal编程技术网

Javascript EAK和ember简单身份验证自定义验证器 我试图通过使用EAK将一个快速和肮脏的基础应用到一个应用程序中。authenticate函数按预期工作:它查找匹配的电子邮件,并在找到时解析承诺

Javascript EAK和ember简单身份验证自定义验证器 我试图通过使用EAK将一个快速和肮脏的基础应用到一个应用程序中。authenticate函数按预期工作:它查找匹配的电子邮件,并在找到时解析承诺,javascript,ember.js,ember-app-kit,ember-simple-auth,Javascript,Ember.js,Ember App Kit,Ember Simple Auth,由于某些原因,在重新加载页面时从未调用还原方法…或者根本没有调用还原方法。我不知道这是不是EAK、ESA的问题,还是我做错了什么 var customAuthenticator = Ember.SimpleAuth.Authenticators.Base.extend({ resourceName: 'user', identifierField: 'email', restore: function (data) { console.log('Atte

由于某些原因,在重新加载页面时从未调用还原方法…或者根本没有调用还原方法。我不知道这是不是EAK、ESA的问题,还是我做错了什么

var customAuthenticator =  Ember.SimpleAuth.Authenticators.Base.extend({
    resourceName: 'user',
    identifierField: 'email',
    restore: function (data) {
        console.log('Attempt to restore -> ', data);
        return new Ember.RSVP.Promise(function (resolve, reject) {
            resolve(data);
        });
    },
    authenticate: function (credentials) {
        var self = this;
        return new Ember.RSVP.Promise(function (resolve, reject) {
            var idObject = {};
            idObject[self.identifierField] = credentials.identification;

            self.get('store').find(self.resourceName, idObject).then(function (user) {
                var dataId;
                if(user.get('content').length) {
                    dataId = user.get('content').objectAt(0).get('data').id;
                    resolve({userId: dataId});
                } else {
                    reject();
                }
            });
        });
    },
    invalidate: function () {
        console.log('Attempt to invalidate');
        return new Ember.RSVP.Promise(function (resolve, reject) {
            resolve();
        });
    }
});

export default {
    name: 'authentication',
    initialize: function (container, application) {
        Ember.SimpleAuth.Session.reopen({
            user: function() {
                if (!Ember.isEmpty(this.get('userId'))) {
                    return container.lookup('store:main').find('user', +this.get('userId'));
                }
            }.property('userId')
        });
        container.register('authenticator:custom', customAuthenticator);
        container.injection('authenticator:custom', 'store', 'store:main');
        Ember.SimpleAuth.setup(container, application);
    }
};
任何见解将不胜感激

编辑:

以下是初始身份验证后本地存储的内容:

编辑:断点后本地范围的快照

编辑:向还原方法添加了一些调试行

restore: function() {
    var _this = this;
    return new Ember.RSVP.Promise(function(resolve, reject) {
      var restoredContent      = _this.store.restore();
      var authenticatorFactory = restoredContent.authenticatorFactory;
      if (!!authenticatorFactory) {
        console.log('Log 1');
        delete restoredContent.authenticatorFactory;
        console.log('Log 2');
        _this.container.lookup(authenticatorFactory).restore(restoredContent).then(function(content) {
          console.log('Log 3');
          _this.setup(authenticatorFactory, content);
          resolve();
        }, function() {
          _this.store.clear();
          reject();
        });
      } else {
        _this.store.clear();
        reject();
      }
    });
  },
从未到达“日志3”行。我还尝试手动执行
\u this.container.lookup('authenticator:custom')
,这似乎会导致无法到达超出它的任何行。因此,查找似乎存在问题

Edit:当从初始值设定项中删除行
container.injection('authenticator:custom','store','store:main')
时,将调用restore方法。显然,如果没有存储,验证器就不是很有用,因此可能需要一种不同的处理方法


及更多:似乎对验证器的任何注入都会导致此问题,而不仅仅是对存储的注入。

问题在于,在调用
Ember.SimpleAuth.setup(容器、应用程序)
之前,我试图注入依赖项。以下是起作用的初始值设定项代码:

export default {
name: 'authentication',
initialize: function (container, application) {
    Ember.SimpleAuth.Session.reopen({
        user: function() {
            if (!Ember.isEmpty(this.get('userId'))) {
                return container.lookup('store:main').find('user', +this.get('userId'));
            }
        }.property('userId')
    });
    container.register('authenticator:custom', customAuthenticator);
    Ember.SimpleAuth.setup(container, application);
    container.injection('authenticator:custom', 'store', 'store:main');
    }
};

您只需在简单身份验证之前注册自定义身份验证程序


基本上,在导出的对象中,在“简单身份验证”之前添加

您可以检查存储中的内容(本地存储)吗会话通过身份验证后?@Marcow我已在主postcan中添加了存储快照。您可以在此处设置断点并检查发生了什么情况?@Marcow看来,存储在该断点处(或断点后的行)仍然有相同的KV对,并且authenticatorFactory和userId存在于restoredContent对象中。为了安全起见,我将添加一个屏幕截图。那么它是否调用验证器的
还原
方法呢?Id
authenticatorFactory
存在,它实际上应该存在。