1

EAK を使用してアプリに組み込まれた認証のための迅速で汚れた基盤を取得しようとしています。認証機能は期待どおりに機能します。一致するメールを探し、見つかった場合は promise を解決します。

何らかの理由で、restore メソッドがページのリロード時に呼び出されることはありません...またはまったく呼び出されません。これが 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();
      }
    });
  },

「Log 3」行に到達することはありません。_this.container.lookup('authenticator:custom')また、それを超える行に到達しないように思われる を手動で実行しようとしました。そのため、ルックアップに問題があるようです。

編集:container.injection('authenticator:custom', 'store', 'store:main')が初期化子から削除されると、復元メソッドが呼び出されます。明らかに、ストアがなければ、オーセンティケーターはあまり役に立たないため、別の処理方法が必要になる場合があります。

その他:ストアのインジェクションだけでなく、オーセンティケーターへのインジェクションがこの問題を引き起こしているようです。

4

2 に答える 2

0

あなたがする必要があるのは、simple-auth の前にカスタム認証子を登録することだけです。

基本的に、エクスポートされたオブジェクトに追加しますbefore: 'simple-auth'

于 2014-11-23T10:25:20.547 に答える