ThinkPHP5框架中如何使用JWT实现用户身份验证?

2026-04-01 07:061阅读0评论SEO资源
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计782个文字,预计阅读时间需要4分钟。

ThinkPHP5框架中如何使用JWT实现用户身份验证?

本例介绍了在ThinkPHP5框架中使用JWT的方法。JWT(JSON Web Tokens)是一种用于在网络应用中安全传输信息的开放标准。以下是简要步骤:

1. JWT简介及下载: - JWT下载地址:[https://jwt.io](https://jwt.io) - GitHub下载:[GitHub链接](#) - 使用Composer安装:运行命令`composer require firebase/php-jwt`确保您的电脑上安装了JWT库。

2. 配置JWT: - 在配置文件中设置JWT密钥,例如在`config/extend.php`中添加: php 'jwt_secret'=> 'your_secret_key',

ThinkPHP5框架中如何使用JWT实现用户身份验证?

3. 生成JWT: - 在控制器中使用JWT库生成token: php use Firebase\JWT\JWT;

public function generateToken($data) { $key=config('jwt_secret'); $token=JWT::encode($data, $key, 'HS256'); return $token; }

4. 验证JWT: - 验证token的合法性: php use Firebase\JWT\JWT; use Firebase\JWT\ExpiredException;

public function verifyToken($token) { $key=config('jwt_secret'); try { $decoded=JWT::decode($token, $key, ['HS256']); return $decoded; } catch (ExpiredException $e) { return 'Token已过期'; } catch (Exception $e) { return 'Token无效'; } }

以上步骤为您在ThinkPHP5中使用JWT提供了基础。更多详细信息和最佳实践,请参考JWT官方文档和GitHub仓库。

本文实例讲述了ThinkPHP5框架中使用JWT的方法。分享给大家供大家参考,具体如下:

JWT下载地址:jwt.io

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

更多关于thinkPHP相关内容感兴趣的读者可查看本站专题:《ThinkPHP入门教程》、《thinkPHP模板操作技巧总结》、《ThinkPHP常用方法总结》、《codeigniter入门教程》、《CI(CodeIgniter)框架进阶教程》、《Zend FrameWork框架入门教程》及《PHP模板技术总结》。

希望本文所述对大家基于ThinkPHP框架的PHP程序设计有所帮助。

标签:方法示例

本文共计782个文字,预计阅读时间需要4分钟。

ThinkPHP5框架中如何使用JWT实现用户身份验证?

本例介绍了在ThinkPHP5框架中使用JWT的方法。JWT(JSON Web Tokens)是一种用于在网络应用中安全传输信息的开放标准。以下是简要步骤:

1. JWT简介及下载: - JWT下载地址:[https://jwt.io](https://jwt.io) - GitHub下载:[GitHub链接](#) - 使用Composer安装:运行命令`composer require firebase/php-jwt`确保您的电脑上安装了JWT库。

2. 配置JWT: - 在配置文件中设置JWT密钥,例如在`config/extend.php`中添加: php 'jwt_secret'=> 'your_secret_key',

ThinkPHP5框架中如何使用JWT实现用户身份验证?

3. 生成JWT: - 在控制器中使用JWT库生成token: php use Firebase\JWT\JWT;

public function generateToken($data) { $key=config('jwt_secret'); $token=JWT::encode($data, $key, 'HS256'); return $token; }

4. 验证JWT: - 验证token的合法性: php use Firebase\JWT\JWT; use Firebase\JWT\ExpiredException;

public function verifyToken($token) { $key=config('jwt_secret'); try { $decoded=JWT::decode($token, $key, ['HS256']); return $decoded; } catch (ExpiredException $e) { return 'Token已过期'; } catch (Exception $e) { return 'Token无效'; } }

以上步骤为您在ThinkPHP5中使用JWT提供了基础。更多详细信息和最佳实践,请参考JWT官方文档和GitHub仓库。

本文实例讲述了ThinkPHP5框架中使用JWT的方法。分享给大家供大家参考,具体如下:

JWT下载地址:jwt.io

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

更多关于thinkPHP相关内容感兴趣的读者可查看本站专题:《ThinkPHP入门教程》、《thinkPHP模板操作技巧总结》、《ThinkPHP常用方法总结》、《codeigniter入门教程》、《CI(CodeIgniter)框架进阶教程》、《Zend FrameWork框架入门教程》及《PHP模板技术总结》。

希望本文所述对大家基于ThinkPHP框架的PHP程序设计有所帮助。

标签:方法示例