2015-08-14 2 views
1

У меня есть код входа на мой маршрут приложения, как показано в примерах в документах, но вызов аутентификации не возвращает обещание. Ответ, который я получаю в 'then', не определен. Поэтому переход не работает. Мне нужно вручную обновить страницу, а затем вызывается верхний перенаправление.Ember Simple Auth переход после входа в систему

import Ember from 'ember'; 

// Make 'session' available throughout the application 
import ApplicationRouteMixin from 'simple-auth/mixins/application-route-mixin'; 

export default Ember.Route.extend(ApplicationRouteMixin, { 
    redirect: function() { 
    this.transitionTo('orders'); 
    }, 
    actions: { 
     authenticate: function() { 
     var data = { 
      identification: this.controller.get('identification'), 
      password: this.controller.get('password') 
     }; 

     this.get('session').authenticate('simple-auth-authenticator:oauth2-password-grant', data).then(
      function(response) { 
      console.log(response); // undefined 
      this.transitionTo('orders'); // can't call on undefined 
      } 
     ); 
     }, 
    } 
}); 

ответ

1

Обещания возвращаемого authenticate метода сеанса не решает со значением. Вы можете получить доступ к данным, которые разрешает аутентификатор, с помощью свойства secure сеанса, например. this.get('session.secure.token)'.

+0

Marco Я получаю это сейчас, «это» внутри функции имеет неправильный контекст. Я опубликовал полный рабочий код, если он кому-то поможет. Спасибо за вашу помощь, долгое время царапал мне голову над этим прошлым вечером! –

+1

Вместо этого вы должны использовать функцию стрелки, поэтому вам не нужно назначать дополнительные '_this'. Дело в том, что вы используете аргумент 'response' в обратном вызове, который всегда будет неопределенным. – marcoow

+0

Да, я начну использовать новый синтаксис, приветствия. –

2

Моя проблема была «эта» внутри вызова функции была неправильным объектом. Решено с помощью var _this = this;

Я выложу полный рабочий код .;

import Ember from 'ember'; 

// Make 'session' available throughout the application 
import ApplicationRouteMixin from 'simple-auth/mixins/application-route-mixin'; 

export default Ember.Route.extend(ApplicationRouteMixin, { 
    redirect: function() { 
    this.transitionTo('orders'); 
    }, 
    actions: { 
     authenticate: function() { 
     var data = { 
      identification: this.controller.get('identification'), 
      password: this.controller.get('password') 
     }; 
     var _this = this; 
     this.get('session').authenticate('simple-auth-authenticator:oauth2-password-grant', data).then(
      function(response) { 
      console.log(_this.get('session')); // this correctly gets the session 
      _this.transitionTo('orders'); 
      } 
     ); 
     }, 
    } 
}); 

 Смежные вопросы

  • Нет связанных вопросов^_^