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)文章
yii實現(xiàn)model添加默認值的方法(2種方法)
這篇文章主要介紹了yii實現(xiàn)model添加默認值的方法,結(jié)合實例分析了在rules()方法及在beforeSave()方法中設(shè)定兩種實現(xiàn)技巧,需要的朋友可以參考下2016-01-01

phpStudy vscode 搭建debug調(diào)試的教程詳解