我应该如何将用户的登录状态传递给我的Ember.js应用程序? [英] How should I pass user's login status to my Ember.js application?

查看:119
本文介绍了我应该如何将用户的登录状态传递给我的Ember.js应用程序?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个交互式Ember应用程序,它有很多选项,只能登录用户。例如,可能有一个帖子列表,然后有另一个链接到我的帖子,这与用户有关。



有两个问题出现在我的脑海里:




  • 如果用户登录,或许他的数据,我该如何告诉应用程序? li>
  • 如何根据登录状态隐藏特定功能和项目?



有没有最好的接近这个做法?我猜这个登录过程本身不会那么复杂,但是如果已登录的话,$ code? do_x else do_y 对我来说是一个很大的未知数。我应该在哪里存储全局用户状态?

解决方案

如果您使用的是ember路由器,那么我的建议是建筑师解决方案如下



LoginController

  App.LoginController = Ember.Controller.extend({
login:function(params){/ *你的逻辑在这里* /},
logout:function(params){/ *你的逻辑在这里* /} ,

user_data_hash:{first_name:the,last_name:Hobbit},

is_logged_in:(function(){
/ *做一些逻辑和返回true或false * /
})。property('some_item_on_user_data_hash')

just_logged_in:(function(){
/ *做一些逻辑并返回true或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'); / *或者在较旧的ember中构建`router.getPath('loginController.is_logged_in');`* /
var just_logged_in = router.get('loginController.just_logged_in'); / *或者在较旧的ember中构建`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({
// ...
})
})


I have an interactive Ember app which has a lot of options which are available only to signed in users. For example there might be a list of posts, and then there's another link to my posts, which are relevant to the user.

There are two issues that come to my mind:

  • how do I tell the app if a user is logged in, and maybe his data?
  • how do I hide specific features and items based on his login state?

Are there any best practices for approaching this? I guess the login process itself won't be that complicated, but the if logged_in? do_x else do_y is a big unknown for me atm. Where should I store the global user state?

解决方案

If you are using the ember router, then my suggestion would be to architect a solution like this

LoginController

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')

Then in your router before you allow navigation to a protected route, you check with the LoginController object. This example is take from this answer.

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({
        // ...
    })
})

这篇关于我应该如何将用户的登录状态传递给我的Ember.js应用程序?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆