本文实例讲述了thinkphp5框架中使用jwt的方法。分享给大家供大家参考,具体如下:
jwt下载地址:
可以直接去github上下载,也可以使用composer
使用composer的话要确保你的电脑上安装了composer,进入项目根目录下载即了,自动会放在vendor目录下
创建文件
我是放在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;
/**
* 颁发
* @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过期,客户端就要重新登录。
死性不改77896306