Я пытаюсь настроить ember-simple-auth с помощью бэкенда django-rest-framework, но у меня возникают проблемы с сохранением пользователя в сеансе. Я должен иметь возможность сделать что-то подобное в своих шаблонах:
<h2>Welcome back, {{session.user}}</h2>
Итак, следуя нескольким руководствам, которые я нашел, у меня работает аутентификация и авторизация, поэтому я могу получить действительный токен и использовать его в запросах. Чтобы получить пользователя в сеансе, я изменил App.CustomAuthenticator.authenticate
так, чтобы при возврате токена имя пользователя также сохранялось в сеансе:
authenticate: function(credentials) {
var _this = this;
return new Ember.RSVP.Promise(function(resolve, reject) {
Ember.$.ajax({
url: _this.tokenEndpoint,
type: 'POST',
data: JSON.stringify({username: credentials.identification, password: credentials.password }),
contentType: 'application/json'
}).then(function(response) {
Ember.run(function() {
resolve({
token: response.token,
username: credentials.identification
});
});
}, function(xhr, status, error) {
var response = JSON.parse(xhr.responseText);
Ember.run(function() {
reject(response.error);
});
});
});
},
Затем я изменил Application.intializer
, чтобы дать session
свойство user
:
Ember.Application.initializer({
name: 'authentication',
before: 'simple-auth',
initialize: function(container, application) {
// register the custom authenticator and authorizer so Ember Simple Auth can find them
container.register('authenticator:custom', App.CustomAuthenticator);
container.register('authorizer:custom', App.CustomAuthorizer);
SimpleAuth.Session.reopen({
user: function() {
var username = this.get('username');
if (!Ember.isEmpty(username)) {
return container.lookup('store:main').find('user', {username: username});
}
}.property('username')
});
}
});
Однако при отображении {{session.user.username}}
это просто пустая строка. Мои вопросы:
- Действительно ли это лучший способ назначить пользователя сеансу? Мне это кажется корявым, но я не вижу ничего лучше.
- Я предполагаю, что пустая строка связана с тем, что возвращается обещание, а не объект
User
, так как мне это разрешить?
User
? - person aquavitae   schedule 23.07.2014find
присваивается идентификатор. В моем случае он используется для поиска, т.е..find('user', {username: username})
. - person aquavitae   schedule 23.07.2014.find
может возвращать массив, тогда как.find
с идентификатором в примере возвращает запись напрямую. Хотя это только предположение - не пробовал. - person marcoow   schedule 23.07.2014