07、一步一步学thinkjs之实现注销以及判断是否登录

1、紧接上章内容,我们判断下是否登录成功。打开 F:\thinkjs\2hwl\src\home\controller\user.js indexAction中加入代码

	let userinfo =await this.session('userinfo');

    if (!think.isEmpty(userinfo)){
    	this.assign('userinfo',userinfo);
    }else{
    	return this.redirect('login');
    }
打开F:\thinkjs\2hwl\view\home\user_index.html修改代码

 <header>
    <div class="wrap">
      <h1>登录的用户名是:<%=userinfo.username%>  </h1><br>
	  <a href='logout'>注销</a>
    </div>
  </header>
浏览下看看http://127.0.0.1:8360/user/index



很好,可以查看判断是谁登录的了。


2、实现注销:打开 F:\thinkjs\2hwl\src\home\controller\user.js中加入如下代码:

async logoutAction(){
	await this.session();
	return this.redirect('login');
}

原理是一样的将session清空即可。

完整 F:\thinkjs\2hwl\src\home\controller\user.js内容如下:

'use strict';

import Base from './base.js';

export default class extends Base {
  /**
   * index action
   * @return {Promise} []
   */
  
 async indexAction(){
 	let userinfo =await this.session('userinfo');
 	//auto render template file user_index.html
    if (!think.isEmpty(userinfo)){
    	this.assign('userinfo',userinfo);
    }else{
    	return this.redirect('login');
    }
    
    return  this.display();
  }
  async loginAction(){
  	if (this.isPost()){//判断是否发送信息给后台了,post数据过来.注意:isPost中的P是大写,js是对大小写敏感的。
  		let username = this.post('username');//获取用户名给username变量
  		let password = this.post('password');
  		let data = await this.model('user').where({username:username,password:password}).find();//到数据库中去查找看是否有数据(用户名密码同时相符)
  		if (think.isEmpty(data)){//这里我直接用isEmpty居然不能用。查了下资料需要用think.isEmpty()
  			return this.error(403,'账号密码错误!请重新填写');//登录不成功,返回错误信息。
  		}else{
  			 this.session('userinfo',data);

 			 this.redirect('index');//登录成功将用户信息写入session,返回到user首页。
  		}
  	}
  	return this.display();
  }
async logoutAction(){
	await this.session();//这里一定要加await,否则异步执行清除的,直接就转login了,之前没加await,怎么调试都有session。
	return this.redirect('login');
}
}
总结下:实际上登录就是this.session(‘userinfo’,data)将查询到的data存入session定义名为userinfo,查询就是this.session('userinfo')将session读取出来判断是否登录,退出就是this.session()清空session。
我们这里只是举例实现。对于session的详细讲解见官网内容, https://thinkjs.org/zh-cn/doc/2.2/adapter_session.html

如果所有页面都需要实现登录才能访问我们对controller中的base.js进行修改即可(因为其他controller以及action都是继承自base.js)。粘贴base.js代码以作参考。

'use strict'; 
  
 export default class extends think.controller.base { 
   /** 
    * before 
    */ 
   async __before(){ //__before()是在所有action执行之前调用
  
     let http = this.http; 
     if(http.controller === 'user' && http.action === 'login'){ //如果是user_login那么久不验证了,直接返回给予登录。
       return; 
     } 
     let userInfo = await this.session('userInfo') || {}; 
     if(think.isEmpty(userInfo)){//为空返回失败告知没有登录 
       if(this.isAjax()){ 
         return this.fail('NOT_LOGIN'); 
       } 
     } 
     this.userInfo = userInfo; 
     if(!this.isAjax()){ //返回userinfo,
       this.assign('userInfo', {id: userInfo.id, name: userInfo.username}); 
     } 
   } 
  
 } 




评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值