本篇内容主要讲解“thinkphp6中怎么使用jwt认证”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“thinkphp6中怎么使用jwt认证”吧!

创新互联为企业级客户提高一站式互联网+设计服务,主要包括网站设计、成都网站制作、App定制开发、微信小程序定制开发、宣传片制作、LOGO设计等,帮助客户快速提升营销能力和企业形象,创新互联各部门都有经验丰富的经验,可以确保每一个作品的质量和创作周期,同时每年都有很多新员工加入,为我们带来大量新的创意。
thinkphp6 使用jwt
客户端使用用户名和密码请求登录
服务端收到请求,验证用户名和密码
验证成功后,服务端会签发一个token,再把这个token返回给客户端
客户端收到token后可以把它存储起来,比如放到cookie中
客户端每次向服务端请求资源时需要携带服务端签发的token,可以在cookie或者header中携带
服务端收到请求,然后去验证客户端请求里面带着的token,如果验证成功,就向客户端返回请求数据
安装 jwt 扩展
composer require firebase/php-jwt
安装之后在 vender 目录下的 firebase 文件夹下
调用 JWT里面的 encode 和 decode方法进行生成token和验证token
项目app 目录下的 common.php全局文件使用的 ,做成了公共方法,由于我是多应用的,所以就写在了api下面的common.php,大家可以根据自己需求适当调整
首先 引入 JWT ,然后写两个方法,生成验签和验证token。
$key, //签发者 可以为空
"aud"=>'', //面象的用户,可以为空
"iat"=>time(), //签发时间
"nbf"=>time(), //在什么时候jwt开始生效
"exp"=> time()+30, //token 过期时间
"data"=>[ //记录的uid的信息
'uid'=>$uid,
]
);
$jwt = JWT::encode($token, $key, "HS256"); //生成了 token
return $jwt;}/**
* 验证token
* @param $token
* @return array|int[]
*/function checkToken($token){
$key='abcdefg'; //自定义的一个随机字串用户于加密中常用的 盐 salt
$res['status'] = false;
try {
JWT::$leeway = 60;//当前时间减去60,把时间留点余地
$decoded = JWT::decode($token, new Key($key, 'HS256')); //HS256方式,这里要和签发的时候对应
$arr = (array)$decoded;
$res['status'] = 200;
$res['data'] =(array)$arr['data'];
return $res;
} catch(\Firebase\JWT\SignatureInvalidException $e) { //签名不正确
$res['info'] = "签名不正确";
return $res;
}catch(\Firebase\JWT\BeforeValidException $e) { // 签名在某个时间点之后才能用
$res['info'] = "token失效";
return $res;
}catch(\Firebase\JWT\ExpiredException $e) { // token过期
$res['info'] = "token过期";
return $res;
}catch(Exception $e) { //其他错误
$res['info'] = "未知错误";
return $res;
}}使用jwt生成token
/**
* 使用jwt生成token字符串
*/
public function setJwtToken()
{
$uid = input('uid'); // 接收生成token字符串 如:123
$token = signToken($uid);
// 生成字符串: eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJhYmNkZWZnIiwiYXVkIjoiIiwiaWF0IjoxNjQxNDUwMTU0LCJuYmYiOjE2NDE0NTAxNTcsImV4cCI6MTY0MTQ1NzM1NCwiZGF0YSI6eyJ1aWQiOiIxMjMifX0.I_GAkMsOhtEpIPkizCuQA-b9H6ovSovWx0AwAYI-b0s
echo $token;die;
}
/**
* 使用jwt验证token字符串
*/
public function checkJwtToken()
{
$token = input('token'); // 接收生成token字符串
$result = checkToken($token);
// Array ( [status] => 200 [data] => Array ( [uid] => 123 ) )
print_r($result);die;
}创建 user 控制器
isPost()){
$username = $request->param('username','','trim');
$password = $request->param('password','','trim');
//查询数据库
$user = Db::name('user')->where('username',$username)->find();
if (!$user){
return json(['status' => 'fail','msg' => '用户名不存在']);
}
if ($user['password']!==md5($password)){
return json(['status' => 'fail','msg' => '密码错误']);
}
$getToken = $this->token($user);
return json(['status' => 'success','msg' => '登陆成功','token' => $getToken]);
}
}
public function token($user)
{
$uid = $user['username']; // 接收生成token字符串 如:123
$token = signToken($uid);
dd($token);
}
/**
* 验证token
*/
public function chToken()
{
$token = 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJhYmNkZWZnIiwiYXVkIjoiIiwiaWF0IjoxNjQ4MDkwMDkyLCJuYmYiOjE2NDgwOTAwOTIsImV4cCI6MTY0ODA5MDEyMiwiZGF0YSI6eyJ1aWQiOiJcdTVmMjBcdTRlMDlcdTk4Y2UifX0.oJFpNcZ6stMymOCbD-meX0IPEIYLYNcwKxhMItF2cMw';
$result = checkToken($token);
// Array ( [status] => 200 [data] => Array ( [uid] => 123 ) )
print_r($result);die;
}}用户登录成功返回给前端token,前端将token存储起来,在下次请求的时候头部携带着这个token,后端接受token,在中间件中进行验证
创建api中间件
header();
//判读请求头里有没有token
if(!isset($header['token'])){
return json(['code'=>440,'msg'=>'request must with token']);
}
$token = $header['token'];
try {
// token 合法
$token = checkToken($token);
}catch (\Exception $e){
return json(['code'=>440,'msg'=>'invalid token']);
}
return $next($request);
}}到此,相信大家对“thinkphp6中怎么使用jwt认证”有了更深的了解,不妨来实际操作一番吧!这里是创新互联网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
新闻名称:thinkphp6中怎么使用jwt认证
转载来于:http://www.jxjierui.cn/article/pegcdi.html


咨询
建站咨询
