1. 程式人生 > >07、一步一步學thinkjs之實現登出以及判斷是否登入

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}); 
     } 
   } 
  
 } 


相關推薦

07thinkjs實現登出以及判斷是否登入

1、緊接上章內容,我們判斷下是否登入成功。開啟 F:\thinkjs\2hwl\src\home\controller\user.js indexAction中加入程式碼 let userinfo =await this.session('userinfo');

08thinkjs實現提供一個 API 供第三方使用

在日常程式設計工作經常需要去讀取別人的介面資料,這個介面資料是如何實現的呢?在用thinkjs實現自己的API介面就非常簡單。下面舉個栗子 緊接之前的內容。thinkjs的方便就是很多需要後臺生成的東西我們都不用考慮他是怎麼生成的,直接拿來用就好了。比方前面登入中用的ses

03thinkjs建立一個新頁面no hello world

這步我們學習下如何建立自己的頁面,當然只是簡單的通過控制器+view進行顯示 1、F:\thinkjs\2hwl\src\home\controller\新建一個user.js檔案,controller目錄是控制器目錄。我們新建一個user檔案,也就是說表示 home 模

【Python】07python內置數據結構字符串及bytes

str 字符串 一、字符串1、定義和初始化In [4]: s = "hello python" In [4]: s = "hello python" In [5]: s Out[5]: ‘hello python‘ In [6]: s = ‘hello python‘ In [7]: s Out

【SpringMvc】從零開始SpringMvc實現使用者登入(三)

大家好,在前2篇中,我們實現了SpringMvc的配置和資料庫連線,這一篇我們來用html/ajax實現一個簡單的登入功能。 【SpringMvc】從零開始學SpringMvc之初始化(一) 【SpringMvc】從零開始學SpringMvc之資料庫(二) 準

【SpringMvc】從零開始SpringMvc實現使用者管理(四)

大家好,在上一篇中,我們實現了使用者登入,這一篇我們來實現使用者的增刪改查。由於在第2篇中,我們已經建立好了資料庫,這裡就不在詳述了。 準備 這裡,我們用到了騰訊的前端模板引擎art-template,不熟悉的小夥伴可以先了解一番,或者有熟悉其他模板引擎的,也

MySQL----7 插入更新刪除資料

7.1 插入完整資料記錄 語法: insert into table_name(field1,field2,field3,……)values(value1,value2,value3,……); 例如: 我們先建立一張user表,如下: mysq

java:二使用idea15建立第一個springboot架構的後臺介面程式

1.建立專案 2.建立一個名為HelloWorld的controller 3.配置程式 4.點選生成,執行,使用postman測試成功 5.打包(springboot一般都是打包成jar包,這裡打包成jar包,怎麼打包成war包,後面再

【Linux】Linux——VMware虛擬機器三種網路模式詳解(07)

目錄 00. 目錄 01. 虛擬網路連線元件 02. 常見網路連線配置 03. 橋接模式 04. NAT 模式 05. 僅主機模式 06. 自定義模式

1.開發(遊戲賬服數據庫的使用 Erlang 服務器)

http ats 日誌收集 yield data obj 開發 用戶 nbsp mysql 與mongodb的特點與優劣 http://www.cnblogs.com/eternal1025/p/5419905.html 首先我們來分析下mysql 與mongodb的特

Vue(八)

nod png 路由配置 ring 圖片 sca -a 基本 routes 本篇完成如下場景: 1、系統包含首頁、客戶信息查詢、登錄三個模塊 2、默認進入系統首頁,如果要進行用戶查詢,則需要進行登錄授權 3、查詢用戶後點擊列表項,則進入詳情頁面 基於上述場景需求描述

JVM-運行時數據區域

count 運行期 存儲 編譯期 動態 局部變量表 編譯 表空間 機制 程序計數器(Program Counter Register) 像我們平時讀書一樣,當我們在去做別的事情之前,我們會對我們讀到什麽地方了做一個標記,方便我們再回來的時候接著重新讀。如果

多線程-synchronized

通過 alt not 設置 hand 獲取鎖 執行 本質 支持   當線程執行請求synchronized方法或塊時,monitor會設置幾個虛擬邏輯數據結構來管理這些多線程。         請求的線程會首先被加入到線程排隊隊列中,線程阻塞,當某個擁有線程鎖的線程unlo

J2SE-ConcurrentHashMap原理

等待 鏈表 初始 方案 超過 喚醒 cas 分割 成功   ConcurrentHshMap的數據結構是由一個Segment數組和多個HashEntry數組組成,在Segement數組中包含了HashEntry數組。數據結構如下圖所示:   Segement數組的意義就是將

JVM-垃圾回收

-- 覆蓋 不可達 建立 class對象 如果 而且 節點 棧幀   垃圾回收器在對對象進行回收前,首先要判斷對象是否還“活著”。判斷方法有以下兩種 引用計數法 給對象中添加一個引用計數器,每當有一個地方引用它時,計數器值就加1。當引用失效時,計數器值就減

JVM-垃圾回收算法

無法 程序 gen 適合 順序分配 存在 進行 大小 產生 標記-清除算法 算法分為標記和清除兩個階段:首先標記所有需要回收的對象,在標記完成後統一回收所有被標記的對象。 該算法存在的缺點:   1、 效率問題:標記和清除兩個過程的效率

JVM-Java內存模型

jvm 值傳遞 都是 ssi 方法參數 自己 vol 字節 ati 主內存與工作內存 Java內存模型的主要目標是定義程序中各個變量的訪問規則。即在虛擬機中將變量存儲到內存和從內存中取出變量這樣的底層細節。這裏的變量和Java編程中所說的變量有所區別,它包

JVM-垃圾回收器

trac 部分 current 可控 吞吐量 收集器 控制 需要 但是 Serial收集器 Serial收集器是最基本、歷史最悠久的收集器。這個收集器是一個單線程的收集器。它在進行垃圾收集時,必須暫停其他所有的工作線程,直到它收集結束。Serial收集器是

Python-基礎篇

class 亂碼 eight mov 字符串 if else 10個 顯示 ref 1、安裝   地址:https://www.python.org/downloads/windows/   安裝完成過後,配置環境變量,比如:path後面計入;C:\Python27(可

如何用 phpwind 搭建論壇教你搭建phpwind

本文介紹如何使用輕量應用伺服器的phpwind映象搭建一個論壇。 優惠資訊: 學生請點右邊:學生優惠產品-雲翼計劃-超值9.5元即可,需要學生證 阿里雲限時紅包:最高1888元雲產品通用紅包,可疊加官網常規優惠使用,不領白不領!! 輕量伺服器:最實惠最方便最快速的伺服器,從入門級到高配都有