gpt4 book ai didi

ember.js - 如何在 session 中存储用户

转载 作者:行者123 更新时间:2023-12-04 16:29:03 25 4
gpt4 key购买 nike

我正在尝试使用 django-rest-framework 后端设置 ember-simple-auth,但是在将用户保存到 session 时遇到了一些麻烦。我必须能够在我的模板中做这样的事情:

<h2>Welcome back, {{session.user}}</h2>

因此,按照我找到的几个指南,我已经进行了身份验证和授权,以便我可以获得有效的 token 并在请求中使用。为了让用户参与 session ,我修改了 App.CustomAuthenticator.authenticate以便在返回 token 时,用户名也存储到 session 中:
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.intializersession user属性(property):
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}}呈现它只是一个空字符串。我的问题是:
  • 这真的是将用户分配到 session 的最佳方式吗?这对我来说似乎很笨拙,但我看不到任何更好的东西。
  • 我认为空字符串是因为返回了 Promise 而不是 User对象,那么我该如何解决呢?
  • 最佳答案

    要标记@marcoow 的响应,以下是在 Ember CLI 中实现它的方法:

    索引.html:

    window.ENV['simple-auth'] = {
    authorizer: 'simple-auth-authorizer:devise',
    session: 'session:withCurrentUser'
    };

    初始化程序/自定义 session .js:
    import Session from 'simple-auth/session';

    var SessionWithCurrentUser = Session.extend({
    currentUser: function() {
    var userId = this.get('user_id');
    if (!Ember.isEmpty(userId)) {
    return this.container.lookup('store:main').find('user', userId);
    }
    }.property('user_id')
    });

    export default {
    name: 'customize-session',
    initialize: function(container) {
    container.register('session:withCurrentUser', SessionWithCurrentUser);
    }
    };

    关于ember.js - 如何在 session 中存储用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24904635/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com