2014-01-13 4 views
1

Я следил за Authentication Tutorial, но столкнулся с некоторыми проблемами.сеанс аутентификации Emberjs не работает

У меня есть php backend api, который находится в другом домене, http://rest.api {local development} Приложение ember js использует набор ember-app и соединяется с остальным api. Когда пользователь отправляет форму входа в системе, он посылает имя пользователя/письмо с паролем к одному из маршрута, определенные в остальном апите Session Controller

import AuthManager from 'lms/config/auth_manager'; 

var SessionNewController = Ember.ObjectController.extend({ 

attemptedTransition : null, 
loginText : 'Log In', 

actions: { 
    loginUser : function() { 
     var self = this; 
     var router = this.get('target'); 
     var data = this.getProperties('identity', 'password'); 
     var attemptedTrans = this.get('attemptedTransition'); 

     $.post('http://rest.api/login', 
      data, 
      function(results) { 
       console.log(results.session); 
       console.log(results.user_id); 
       AuthManager.authenticate(results.session, results.user_id); 
       if(attemptedTrans) { 
        attemptedTrans.retry(); 
        self.set('attemptedTransition', null); 
       } else { 
        router.transitionTo('index'); 
       } 
      } 
     ) 
    } 
} 


}); 

export default SessionNewController; 

После получения результата апи в переменных результатах, которая выглядит следующим образом:

Object {success: "user login success", session: "2OmwKLPclC.YhYAT3745467my7t0m2uo", user_id: "1"} 

Но как только я захватить данные и отправить его в AuthManager который находится в Auth Manager Code

import User from 'lms/models/user'; 
import Application from 'lms/adapters/application'; 
var AuthManager = Ember.Object.extend({ 

    init: function() { 
     this._super(); 
     var accessToken = $.cookie('access_token'); 
     var authUserId = $.cookie('auth_user'); 
     if(!Ember.isEmpty(accessToken) || !Ember.isEmpty(authUserId)) { 
      this.authenticate(accessToken, authUserId); 
     } 
    }, 

    isAuthenticated: function() { 
     return !Ember.isEmpty(this.get('ApiKey.accessToken')) && !Ember.isEmpty(this.get('ApiKey.user')); 
    }, 

    authenticate: function(accessToken, userId) { 
     $.ajaxSetup({ 
      headers: { 'Authorization': 'Bearer ' + accessToken } 
     }); 
     var user = User.store.find(userId); 
     console.log(user); 
     this.set('ApiKey', ApiKey.create({ 
      accessToken: accessToken, 
      user: user 
     })); 
    }, 

    reset: function() { 
     this.set('ApiKey', null); 
     $.ajaxSetup({ 
      headers: { 'Authorization': 'Bearer None' } 
     }); 
    }, 

    apiKeyObserver: function() { 
     Application.accessToken = this.get('apikey.accessToken'); 
     if (Ember.isEmpty(this.get('ApiKey'))) { 
      $.removeCookie('access_token'); 
      $.removeCookie('auth_user'); 
     } else { 
      $.cookie('access_token', this.get('ApiKey.accessToken')); 
      $.cookie('auth_user', this.get('ApiKey.user.id')); 
     } 
    }.observes('ApiKey') 
}); 

export default AuthManager; 

я получил сообщение об ошибке в консоли говоря

Uncaught TypeError: Object function() { 
    if (!wasApplied) { 
     Class.proto(); // prepare prototype... 
    } 
    o_defineProperty(this, GUID_KEY, undefinedDescriptor); 
    o_defineProperty(this, '_super', undefinedDescriptor); 
    var m = met...<omitted>...e' new.js:23 
(anonymous function) new.js:23 
jQuery.Callbacks.fire jquery.js:1037 
jQuery.Callbacks.self.fireWith jquery.js:1148 
done jquery.js:8074 
jQuery.ajaxTransport.send.callback jquery.js:8598 

Он не в состоянии передать переменные в импортируемой функции.

ответ

0

Наконец-то это получилось. Ошибка, которую я делал, заключается в расширении Ember.Object.extend() на auth_manager.js, я нигде не создавал объект. Вот почему он не мог установить создание файла cookie и выбросить это сообщение об ошибке.

Все, что мне оставалось делать, было .create() после расширения объекта.

Не знаю, является ли это правильным методом или нет. Но это, безусловно, работает.

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