2015-06-27 2 views
1

Я хочу сохранить идентификатор пользователя в сеансе. У меня есть этот метод AUTHENTICATE в пользовательском идентифицирующей:Как сохранить идентификатор пользователя в сеансе с помощью ember-simple-auth?

authenticate: (credentials) -> 
    _this = this 
    new (Ember.RSVP.Promise) (resolve, reject) -> 
    Ember.$.ajax(
     url: 'http://localhost:3000/api/v1/sessions' 
     type: 'POST' 
     data: session: 
     email: credentials.identification 
     password: credentials.password 
    ).then ((response) -> 
     _this.set('user_id', response.user_id) 
     Ember.run -> 
     resolve token: response.token 
    ), (xhr, status, error) -> 
     response = JSON.parse(xhr.responseText) 
     Ember.run -> 
     reject response.error 

Это кофейный сценарий, но он работает как JavaScript. Как вы можете это сделать, я установил user_id в сеанс.

В app/initializers/custom-session, у меня есть это:

import Ember from "ember"; 
import Session from "simple-auth/session"; 

export default { 
    name: "current-user", 
    before: "simple-auth", 
    initialize: function(container) { 
    Session.reopen({ 
     setCurrentUser: function() { 
     return this.get('user_id') 
     }.observes('secure.access_token') 
    }); 
    } 
}; 

user_id всегда возвращает undefined. Я нашел много решений в Интернете, но ничего не работает.

Есть ли простое решение для этого?

ответ

2

Вы устанавливаете user_id на authenticator (_this.set('user_id', response.user_id)) вместо session. Код user_id должен быть передан методу разрешения в вашем authenticator. Таким образом, ваш идентификатор пользователя доступен secure.user_id в вашем session.

+0

Я добавил обратный вызов 'then' для моей аутентификации, и он работает. Единственное, что мне не нравится, - это то, что идентификатор пользователя отправляется почтовым запросом, который я сделал в аутентификаторе. У меня нет доступа к нему в моем методе обратного вызова. Знаете ли вы, можно ли получить информацию без второго запроса? – Dougui

+0

@Dougui Что вы подразумеваете под методом обратного вызова? Можете ли вы привести пример? – jcbvm