Пользовательский аутентификатор Ember Simple Auth

Я пытался создать свойство session.currentUser со свойствами id, email и points.

Я имею в виду Пользовательский аутентификатор с простой аутентификацией Ember + интерфейс командной строки Ember и Как сохранить пользователя в сеансе , но я просто не могу понять, как эти части сочетаются друг с другом.

Я использую Ember CLI. В моем index.html у меня есть:

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

В initializers/custom-session.js у меня есть:

import Session from 'simple-auth/session';
import Devise from 'simple-auth-devise/authenticators/devise';

export default {
  name: 'session:custom',
  before: 'simple-auth',
  initialize: function(container) {
    container.register('session:custom', Devise);
    Session.extend({
      currentUser: function() {
        var id = this.get('id');
        var email: this.get('user_email');
        var points: this.get('points');

        if (!Ember.isEmpty(id)) {
          return this.store.createRecord('user', {
            id: id,
            email: email,
            points: points
          });
        }
      }.property('id')
    });
  }
};

Это кажется мне неправильным во многих отношениях, но после нескольких часов попыток заставить это работать, это, по крайней мере, указание на то, чего я пытаюсь достичь.

Буду очень благодарен за любую помощь. Заранее спасибо!


person michael    schedule 14.08.2014    source источник


Ответы (1)


Я понял!!! :)

индекс.html:

window.ENV['simple-auth'] = {
  authorizer: 'simple-auth-authorizer:devise',
  session: 'session:withCurrentUser'
};

инициализаторы/настроить-session.js:

import Session from 'simple-auth/session';

var SessionWithCurrentUser = Session.extend({
  currentUser: function() {
    var userId = this.get('user_id');
    if (!Ember.isEmpty(userId)) {
      return this.container.lookup('store:main').find('user', userId);
    }
  }.property('user_id')
});

export default {
  name: 'customize-session',
  initialize: function(container) {
    container.register('session:withCurrentUser', SessionWithCurrentUser);
  }
};

Надеюсь, это поможет кому-то еще.

person michael    schedule 14.08.2014
comment
Мое решение выглядит почти так же, как ваше. Единственная разница (если вы используете ember-cli) заключается в том, что я помещаю конфигурацию пользовательского сеанса в config/environment.js. - person Feech; 14.08.2014
comment
Спасибо, что опубликовали это! Можете ли вы сказать мне, определили ли вы явно userId в своей модели или это просто обычный идентификатор, который автоматически извлекается из API? У меня есть API-интерфейс rails devise, и он, похоже, не привлекает пользователя только этим кодом, у вас было что-то необычное с контроллером, маршрутом или у вас было все так, как описано в простой документации по разработке авторизации? - person Coherent; 25.02.2015
comment
@Coherent Прошло много времени, и у меня больше нет доступа к этому коду, но я считаю, что this.get('user_id') - это способ получить идентификатор от Simple Auth. Затем вы используете это, чтобы найти user по его обычному старому свойству id. Я не думаю, что была какая-то другая конфигурация. - person michael; 25.02.2015
comment
Спасибо, я ценю ответ. Я знаю, что у вас нет к нему доступа, но вы случайно не знаете, как выглядела маршрутизация рельсов? Вы только что сказали devise_for :users, controllers: { sessions: 'sessions' }, а затем в следующей строке resources :users? - person Coherent; 28.02.2015
comment
@Coherent Думаю, да. На самом деле я создал PR на Ember. Simple Auth Devise README, чтобы конкретизировать указания, основанные на моем опыте, поэтому, если вы будете следовать README, вы должны получить настройку, очень похожую на мою. - person michael; 02.03.2015