4

我现在在没有 ember 的情况下处理用户登录/注册,但我想在 ember 中处理用户配置文件(编辑配置文件)。拥有一个可以处理当前用户的单例模型的最佳做法是什么?我将一个简单的用户定义为:

App.User = DS.Model.extend({
    email: DS.attr('string'),
    name: DS.attr('string'),
});

我可以填充它,App.ready但我不太确定如何使用其他任何东西App.User.find(id)- 而且我不知道 id。我的服务器可以从这个会话中返回当前登录的用户,但是在这种情况下如何使用它呢?还是我以错误的方式处理这个问题?

谢谢

4

2 回答 2

4

我基本上按照你的描述做。我使用下面的代码调用后端以获取当前登录的用户并将其设置在 Ember 应用程序中。

var App = Ember.Application.create({
    LOG_TRANSITIONS: true,
});

App.deferReadiness();

$.ajax({
    url: 'http://localhost:3000/login',
    dataType: 'json',
    success: function (resp) {
        console.log(resp.user);

        App.store.load(App.User, resp.user._id, resp.user);
        App.store.load(App.Company, resp.company._id, resp.company);

        var user = App.User.find(resp.user._id);
        var company = App.Company.find(resp.company._id);

        App.CurrentUserController.reopen({
            content: user
        });

        App.CurrentCompanyController.reopen({
            content: company
        });

        App.advanceReadiness();
    },
    error: function (resp) {
        console.log('failed: ' + resp);
        App.advanceReadiness();
    }
});

App.initialize();
于 2013-03-27T18:28:09.577 回答
4

Discourse将当前用户的信息嵌入到基础 HTML 页面中,并将其预加载到User应用程序路由中的模型中:

https://github.com/discourse/discourse/blob/master/app/assets/javascripts/discourse/routes/application_route.js

然后User模型有足够的信息来访问用户的个人资料/等:

https://github.com/discourse/discourse/blob/master/app/assets/javascripts/discourse/models/user.js

会话特定项目(例如注销)访问单独的/session/URL:

https://github.com/discourse/discourse/blob/master/app/assets/javascripts/discourse.js#L169

如果您正在使用会话并且希望避免在基本 HTML 页面中嵌入当前用户信息(如果您正在静态提供内容等),您还可以手动访问/session/返回当前登录用户的会话特定 URL(例如)根据当前会话的信息。

于 2013-03-27T13:41:49.837 回答