Ember-simple-auth с laravel

У меня возникли проблемы с созданием пользовательского аутентификатора для моего бэкэнда 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;

person user3813559    schedule 22.08.2014    source источник


Ответы (1)


Ember.SimpleAuth больше не существует, теперь у него есть собственный глобальный SimpleAuth, когда вы используете браузерный дистрибутив. Похоже, вы используете ember-cli, что означает, что вы в любом случае используете дистрибутив AMD Ember Simple Auth, который вообще не определяет никаких глобальных параметров. Инструкции по использованию Ember Simple Auth с ember-cli см. на странице этот пост в блоге.

Кроме того, ваш аутентификатор и авторизатор на первый взгляд выглядят нормально и в целом должны работать именно так.

person marcoow    schedule 22.08.2014
comment
Спасибо за ответ. Ваши уроки и видео на ютубе очень помогли. У меня есть одна проблема с аутентификатором, удостоверяющим подлинность, учетные данные пусты. Как передать ему значения? - person user3813559; 22.08.2014
comment
Данные, которые аутентификатор использует для аутентификации, передаются от контроллера (обычно либо от LoginControllerMixin, если вы его используете, либо вручную к this.get('session').authenticate('authenticator:larval', { YOUR DATA HERE })). - person marcoow; 23.08.2014