Javascript 我应该如何通过用户';我的Ember.js应用程序的登录状态?

Javascript 我应该如何通过用户';我的Ember.js应用程序的登录状态?,javascript,authentication,ember.js,Javascript,Authentication,Ember.js,我有一个互动的余烬应用程序,它有很多选项,只有登录用户才能使用。例如,可能有一个帖子列表,然后有另一个指向我的帖子的链接,这与用户相关 我想到了两个问题: 我如何告诉应用程序用户是否已登录,可能还有他的数据 如何根据他的登录状态隐藏特定功能和项目 有什么最佳实践可以实现这一点吗?我想登录过程本身不会那么复杂,但是如果登录,?做其他事对我来说是个很大的未知数。我应该在哪里存储全局用户状态?如果您使用的是ember路由器,那么我的建议是设计一个这样的解决方案 登录控制器 App.LoginCon

我有一个互动的余烬应用程序,它有很多选项,只有登录用户才能使用。例如,可能有一个帖子列表,然后有另一个指向我的帖子的链接,这与用户相关

我想到了两个问题:

  • 我如何告诉应用程序用户是否已登录,可能还有他的数据
  • 如何根据他的登录状态隐藏特定功能和项目

有什么最佳实践可以实现这一点吗?我想登录过程本身不会那么复杂,但是如果登录,
?做其他事对我来说是个很大的未知数。我应该在哪里存储全局用户状态?

如果您使用的是ember路由器,那么我的建议是设计一个这样的解决方案

登录控制器

App.LoginController = Ember.Controller.extend({
    login: function(params){ /* Your logic here */ },
    logout: function(params){ /* Your logic here */},

    user_data_hash: { first_name: "The", last_name: "Hobbit"},

    is_logged_in: (function() {
        /* do some logic and return true or false */
    }).property('some_item_on_user_data_hash')

    just_logged_in: (function() {
        /* do some logic and return true or false */
    }).property('some_item_on_user_data_hash')
然后在路由器中,在允许导航到受保护的路由之前,使用
LoginController
对象进行检查。这个例子取自

root: Ember.Route.extend({
    index: Ember.Route.extend({
        enter: function(router) {
            var logged_in = router.get('loginController.is_logged_in'); /*Or in older ember builds `router.getPath('loginController.is_logged_in');`*/
            var just_logged_in = router.get('loginController.just_logged_in'); /*Or in older ember builds `router.getPath('loginController.just_logged_in');`*/
            Ember.run.next(function() {
                if (logged_in && just_logged_in) {
                    router.transitionTo('loggedIn');
                } else if (!logged_in) {
                    router.transitionTo('loggedOut');
                }
            });
        }
    }),

    loggedIn: Ember.Route.extend({
        // ...
    }),

    loggedOut: Ember.Route.extend({
        // ...
    })
})