PHP-JWT使用教程

官方使用教程firebase/php-jwt - Packagist

Installation

Use composer to manage your dependencies and download PHP-JWT:

1
composer require firebase/php-jwt

Optionally, install the paragonie/sodium_compat package from composer if your php is < 7.2 or does not have libsodium installed:

1
composer require paragonie/sodium_compat
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
//生成验签token
use Firebase\JWT\JWT;

class compareToken
{
public function signToken ($uid) {
//这里是自定义的一个随机字串,应该写在config文件中的,解密时也会用,相当 于加密中常用的 盐 salt
$key = 'example_key';
$payload = [
'iss' => 'http://example.org', //签发者 可以为空
'aud' => 'http://example.com', //面象的用户,可以为空
'iat' => time(), //签发时间
'nbf' => time(), //在什么时候jwt开始生效
"exp" => time() + 200, //token 过期时间 200秒
//记录的userid的信息,这里是自已添加上去的,如果有其它信息,可以再添加数组的键值对
"data"=> [
'uid'=>$uid
]
];
// print_r($token);
$jwt = JWT::encode($payload, $key, "HS256"); //根据参数生成了 token
return $jwt
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
//验证token
use Firebase\JWT\JWT;
use Firebase\JWT\Key;

class compareToken
{
public function handle ($request, \Closure $next) {
// 从头部获取token的值
$token = request()->header('token');
// dump($header);
// 判断token是否存在
if (!isset($token) || empty($token)) {
return json(['code'=>400,'message'=>'token不存在']);
}
// token解码
$jwt = JWT::decode($token,new Key('example_key','HS256'));
// 存在的话就返回
if($jwt){
return $next($request);
};

}
}


分隔符

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
//token中保存的数据
namespace app\admin\controller;

use app\BaseController;
use Firebase\JWT\JWT;
use Firebase\JWT\Key;
use think\App;

class Base extends BaseController
{
public function __construct(App $app)
{
parent::__construct($app);
$token = request()->header('Authorization');
$jwt = JWT::decode($token,new Key('admin_key','HS256'));

if($jwt){
//dump($jwt);
//如果token中有自定义保存数据的话,以下方式可以获取。
$this->id = $jwt->data->id;
$this->username = $jwt->data->username;
};
}
}

1
2
3
4
5
6
7
8
9
10
11
12
//获取值
namespace app\admin\controller;
class Index extends Base
{
//继承Base后可以获取得到里面的值
public function demo(){
$id = $this->id;
$username = $this->usernmae;
echo $id;
echo $username;
}
}