ThinkPHP5中使用JWT

JWT下载地址:https://jwt.io

可以直接去github上下载,也可以使用composer

使用composer的话要确保你的电脑上安装了composer,进入项目根目录下载即了,自动会放在vendor目录下

创建文件

我是放在common目录下

ThinkPHP5中使用JWT_第1张图片

使用教程

github都有的

贴源码

JWTAuth.php

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 用来测试

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过期,客户端就要重新登录。

你可能感兴趣的:(PHP)