Ember-simple-auth with laravel

时间:2014-08-22 03:31:28

标签: ember.js laravel-4 ember-cli

我在为laravel后端创建自定义身份验证器时遇到问题。我不确定这是否是laravel的正确自定义验证器,但我使用它作为起点(https://github.com/simplabs/ember-simple-auth/blob/master/examples/6-custom-server.html)。

我的Ember.SimpleAuth未定义。这是我在app.js中的内容。

import Ember from 'ember';
import Resolver from 'ember/resolver';
import loadInitializers from 'ember/load-initializers';

Ember.MODEL_FACTORY_INJECTIONS = true;

window.ENV = window.ENV || {};
window.ENV['simple-auth'] = {
    authorizer: 'authorizer:custom'
};

Ember.Application.initializer({
    name: 'authentication',
    before: 'simple-auth',
    initialize: function(container, application) {
            //register the laravel authenticator so the session can find it
            container.register('authenticator:laravel', App.LaravelAuthenticator);
            container.register('authorizer:custom', App.CustomAuthorizer);            
    }
});


var App = Ember.Application.extend({
  modulePrefix: 'ember-simple-auth-sample', // TODO: loaded via config
  Resolver: Resolver
});

App.LaravelAuthenticator = Ember.SimpleAuth.Authenticators.Base.extend({
    tokenEndpoint: '/v4/session',

    restore: function(data) {
      return new Ember.RSVP.Promise(function(resolve, reject) {
        if (!Ember.isEmpty(data.token)) {
          resolve(data);
        } else {
          reject();
        }
      });
    },

    authenticate: function(credentials) {
      var _this = this;
      return new Ember.RSVP.Promise(function(resolve, reject) {
        Ember.$.ajax({
          url:         _this.tokenEndpoint,
          type:        'POST',
          data:        JSON.stringify({ session: { identification: credentials.identification, password: credentials.password } }),
          contentType: 'application/json'
        }).then(function(response) {
          Ember.run(function() {
            resolve({ token: response.session.token });
          });
        }, function(xhr, status, error) {
          var response = JSON.parse(xhr.responseText);
          Ember.run(function() {
            reject(response.error);
          });
        });
      });
    },

    invalidate: function() {
      var _this = this;
      return new Ember.RSVP.Promise(function(resolve) {
        Ember.$.ajax({ url: _this.tokenEndpoint, type: 'DELETE' }).always(function() {
          resolve();
        });
      });
    }
});

// the custom authorizer that authorizes requests against the custom server
App.CustomAuthorizer = Ember.SimpleAuth.Authorizers.Base.extend({
    authorize: function(jqXHR, requestOptions) {
        if (this.get('session.isAuthenticated') && !Ember.isEmpty(this.get('session.token'))) {
            jqXHR.setRequestHeader('Authorization', 'Token: ' + this.get('session.token'));
        }
    }
});

loadInitializers(App, 'ember-simple-auth-sample');

export default App;

1 个答案:

答案 0 :(得分:1)

Ember.SimpleAuth不再存在,当您使用浏览器分发时,它现在拥有自己的全局SimpleAuth。看起来你正在使用ember-cli,这意味着你正在使用Ember Simple Auth的AMD发行版,它根本没有定义任何全局。有关如何在ember-cli中使用Ember Simple Auth的说明,请参阅this blog post

除此之外,您的身份验证器和授权程序在第一眼就看起来很好,并且通常应该以这种方式工作。