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条回复

AltStyle によって変換されたページ (->オリジナル) /