2015-07-26 2 views
1

Я видел другие вопросы об этом (как this one), и я считаю, что это должно работатьСохранение пользователя на сессии в качестве вычисленного собственности

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

export default { 
    name: 'session-with-me', 
    before: 'simple-auth', 
    initialize: function() { 
    Session.reopen({ 
     me: function() { 
     if (this.get('isAuthenticated')) { 
      return this.container.lookup('service:store').find('me', { singleton: true }); 
     } 
     }.property('isAuthenticated') 
    }); 
    } 
}; 

в find('me', { singleton: true }) является рабочим пластырь Эмбер-jsonapi -Ресурсы. Во время отладки я могу увидеть отправленный запрос и получить полезную нагрузку. Я использую тот же самый вызов find в другом месте приложения и могу подтвердить, что модель получает экземпляр.

На инспектора, под container > simple-auth-session я могу видеть me как свойство сеанса, но он показывает, как { _id: 68, _label: undefined ...}

ли способ установить свойство сеанса изменилось? Я, возможно, видел упоминание об этом где-то, но я больше не могу его найти.

Это область в этом же домене another question I asked earlier, но я отказываюсь от этого подхода и просто пытаюсь извлечь пользователя независимо от процесса аутентификации.

ответ

2

Настройка пользовательской сессии так:

export default Session.extend({ 
    me: function() { 
    var accessToken = this.get('secure.access_token'); 
    if (!Ember.isEmpty(accessToken)) { 
     return DS.PromiseObject.create({ 
     promise: this.container.lookup('service:me').find({}); 
     }); 
    } 
    }.property('secure.access_token') 
}); 

// app/config/environment.js 
ENV['simple-auth'] = { 
    session: 'session:me' 
} 

DS.PromiseObject фактически является частью Ember данных, которые вы не используете - Я не знаю, есть ли эквивалент в выбранной вами библиотеке.

+0

Нет, но я спросил об этом на слабине, и похоже, что определение его в строке так же просто, как 'var PromiseObject = Ember. ObjectProxy.extend (Ember.PromiseProxyMixin); ' – oliverbarnes

0

Это, скорее всего, проблема с ресурсами ember-jsonapi, а не с Ember Simple Auth.

Вместо повторного открытия сеанса, хотя вы должны определить свой собственный, который расширяет значение по умолчанию, которое предоставляет Ember Simple Auth - см., Например, этот ответ: How to store the user in a session

0

Мы закончили тем, что делает его работу так:

// app/sessions/me.js 
export default Session.extend({ 
    me: function() { 
    var accessToken = this.get('secure.access_token'); 
    if (!Ember.isEmpty(accessToken)) { 
     let self = this; 
     return this.container.lookup('service:me').find({}).then((me) => { 
     self.set('me', me); 
     }); 
    } 
    }.property('secure.access_token') 
}); 

// app/config/environment.js 
ENV['simple-auth'] = { 
    session: 'session:me' 
} 

Отчасти это было связано с тем, как услуги ресурса инициализируется в Эйр (так @ marcoow-х догадка на это было правильно), а другой часть была просто плохой кодировкой с моей стороны.

Интересно у нас не было явным образом регистрировать сессию в контейнере

+0

Не так уж хорошо установить свойство, названное как cp, хотя (которое эффективно заменяет cp). Я думаю, что с вашим решением свойство 'me' также сохранит свою ценность после выхода пользователя из системы. Вы должны вернуть обещание или обернуть это в объект обещания вместо этого или использовать наблюдателя, который устанавливает (или отключает) свойство 'me'. – marcoow

+0

@marcoow я вижу. Тогда я «не принял» мой ответ. Проблема в том, что я пробовал идти по маршруту обещаний, но я действительно еще не умею их использовать. Эти два вопроса здесь о SO тоже об этом, я спрашиваю, как будет выглядеть этот код. Ссылки полезны, так как указывают на проблемы с вышеупомянутым решением, но не совсем то, что мне нужно здесь - я ищу конечное решение. Было бы особенно интересно посмотреть, как это будет сделано с ESA 1.0, а также – oliverbarnes

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