ThinkPHP5框架中使用JWT的方法示例
本文實例講述了ThinkPHP5框架中使用JWT的方法。分享給大家供大家參考,具體如下:
JWT下載地址:https://jwt.io
可以直接去github上下載,也可以使用composer
使用composer的話要確保你的電腦上安裝了composer,進入項目根目錄下載即了,自動會放在vendor目錄下
創(chuàng)建文件
我是放在common目錄下

使用教程
github都有的
貼源碼
JWTAuth.php
<?php
namespace app\common\Auth;
use \Lcobucci\JWT\Builder;
use \Lcobucci\JWT\Signer\Hmac\Sha256;
use \Lcobucci\JWT\Parser;
use \Lcobucci\JWT\ValidationData;
/**
* 單例模式
*/
class JWTAuth
{
private static $instance;
/**
* JWT TOKEN
* @var [type]
*/
private $token;
/**
* 頒發(fā)
* @var string
*/
private $iss = 'api.test.com';
/**
* 接收
* @var string
*/
private $aud = 'app.com';
private $uid;
private $secrect="#$%#$%*&^(*(*(";
private $decodeToken;
public static function getInstance() {
if(is_null(self::$instance)) {
self::$instance = new self();
}
return self::$instance;
}
private function __contruct(){
}
private function __clone(){
}
public function encode(){
$time = time();
$this->token = (new builder())->setHeader('alg','HS256')
->setIssuer($this->iss)
->setAudience($this->aud)
->setIssuedAt($time) //生效時間
->setExpiration($time + 20)//過期時間
->set('uid',$this->uid)
->sign(new Sha256(), $this->secrect)//加密算法
->getToken();
return $this;
}
public function getToken(){
return (string)$this->token;
}
public function setToken($token){
$this->token = $token;
return $this;
}
/**
* 用戶信息uid
* @param [type] $uid [description]
*/
public function setUid($uid){
$this->uid = $uid;
return $this;
}
public function jsonDecode(){
$token = $this->token;
$this->decodeToken = (new Parser())->parse((string) $token);
// echo $this->decodeToken->getClaim('uid');
return $this->decodeToken;
}
/**
* 驗證令牌是否有效
* @return [type] [description]
*/
public function validate(){
$data = new ValidationData();
$data->setIssuer($this->iss);
$data->setAudience($this->aud);
return $this->jsonDecode()->validate($data);
}
/**
* 簽名來驗證令牌在生成后是否未被修改
* @return [type] [description]
*/
public function verify(){
$result = $this->jsonDecode()->verify(new Sha256(), $this->secrect);
return $result;
}
}
user.php 用來測試
<?php
namespace app\index\controller;
use app\common\Auth\JWTAuth;
class User{
public function login(){
$jwtAuth = JWTAuth::getInstance();
$token = $jwtAuth->setUid(1)->encode()->getToken();
echo $token;
// var_dump(success_json_data(['token'=>$token]));
}
public function check_login(){
$jwtAuth = JWTAuth::getInstance();
$jwtAuth->setToken('eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJhcGkudGVzdC5jb20iLCJhdWQiOiJhcHAuY29tIiwiaWF0IjoxNTU2MDk1MDI5LCJleHAiOjE1NTYwOTUwNDksInVpZCI6MX0.oi4rLbQFNZUJsW4fVHWiOQxfEmomuvldAV-gFKl2V74');
if($jwtAuth->validate() && $jwtAuth->verify()){
echo '驗證成功';
}else{
echo '登錄過期';
}
}
}
最后
jwt本身的話是不帶token刷新方法,所以一旦token過期,客戶端就要重新登錄。
更多關(guān)于thinkPHP相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《ThinkPHP入門教程》、《thinkPHP模板操作技巧總結(jié)》、《ThinkPHP常用方法總結(jié)》、《codeigniter入門教程》、《CI(CodeIgniter)框架進階教程》、《Zend FrameWork框架入門教程》及《PHP模板技術(shù)總結(jié)》。
希望本文所述對大家基于ThinkPHP框架的PHP程序設(shè)計有所幫助。
相關(guān)文章
PHP is_array() 檢測變量是否是數(shù)組的實現(xiàn)方法
下面小編就為大家?guī)硪黄狿HP is_array() 檢測變量是否是數(shù)組的實現(xiàn)方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考,一起跟隨小編過來看看吧2016-06-06
php獲得剛插入數(shù)據(jù)的id 的幾種方法總結(jié)
今天小編就為大家分享一篇php獲得剛插入數(shù)據(jù)的id 的幾種方法總結(jié),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-05-05
laravel http 自定義公共驗證和響應(yīng)的方法
今天小編就為大家分享一篇laravel http 自定義公共驗證和響應(yīng)的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-09-09
PHP 計算至少是其他數(shù)字兩倍的最大數(shù)的實現(xiàn)代碼
這篇文章主要介紹了PHP 計算至少是其他數(shù)字兩倍的最大數(shù),本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-05-05
thinkphp5+layui實現(xiàn)的分頁樣式示例
這篇文章主要介紹了thinkphp5+layui實現(xiàn)的分頁樣式,結(jié)合實例形式詳細分析了thinkPHP5框架結(jié)合layui實現(xiàn)的分頁功能相關(guān)的配置、查詢等操作技巧,需要的朋友可以參考下2019-10-10
ThinkPHP數(shù)據(jù)操作方法總結(jié)
這篇文章主要介紹了ThinkPHP數(shù)據(jù)操作方法,以實例形式較為詳細的分析總結(jié)了ThinkPHP添加、更新、查詢及刪除數(shù)據(jù)的實現(xiàn)技巧,具有一定參考借鑒價值,需要的朋友可以參考下2015-09-09

