w3ctech

ThinkJS入门学习实例(2)

完整示例代码

四、登录验证、显示登录用户名和注销

ThinkJS的控制器有个初始化init方法: 在init方法里判断是否已经登录,并且把这个promise返回,后续的action执行则是在这个then之后执行。

下面说说具体代码:

  • 4.1. 更通用的登录验证:

在App/Lib/Controller/Admin/增加一个BaseController.js:

init: function (http) {
    this.super('init', http);
    /**
     * 其他的通用逻辑
     */
    //login请求不判断当前是否已经登录
    if (this.http.action === 'login') {
        return;
    }

    var self = this;
    return self.session('userInfo').then(function (userInfo) {
        //用户信息为空
        if (isEmpty(userInfo)) {
            //ajax访问返回一个json的错误信息
            if (self.isAjax()) {
                return self.error(403);
            } else {
                //跳转到登录页
                return self.redirect('login');
            }
        } else {
            //用户已经登录
            self.userInfo = userInfo;
            self.assign('userInfo', userInfo);
        }
    });
}

这样,当你进入后台任何一个页面时,都会先检测你是否登录,如果没有登录,则跳转到/admin/index/login页面;如果已经登录,则保存session登录信息,以供具体的页面调用。

  • 4.2. 在页面显示登录的用户名:

假设你要在后台首页admin/index/index显示登录的用户名,则可以这么做:

//首页
indexAction: function () {
    var userInfo = this.userInfo;
    var self = this;

    if (!isEmpty(userInfo)) {
        self.assign({'title': '管理-首页', 'user': userInfo});
        return self.display();
    }
}

然后在模版中显示即可:

<h4>当前登录用户:<%= user.name %>,<a href="logout">注销</a></h4>
  • 4.3. 注销
//注销
logoutAction: function () {
    var self = this;
    self.session('userInfo', '');
    self.redirect('login');
}

注销后跳转到登录页面。

未完待续。。。

更多相关文章

水平有限,如果文章有啥错误,还请不吝赐教 :)

完整示例代码

w3ctech微信

扫码关注w3ctech微信公众号

共收到0条回复