IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发测试 -> tp6官方jwt---Token认证 -> 正文阅读

[开发测试]tp6官方jwt---Token认证

tp6jwt:JWT-AUTH · tp6-jwtauth · 看云icon-default.png?t=LBL2https://www.kancloud.cn/sfzl/tp6-jwtauth/2481656

第一步安装:

composer require thans/tp-jwt-auth

第二步安装扩展:

php think jwt:create

此举将生成jwt.php和.exe文件,jwt.php里可以更改配置信息(app/config/jwt.php)比如jwt过期时间.

return [
    'secret'      => env('JWT_SECRET'),
    //Asymmetric key
    'public_key'  => env('JWT_PUBLIC_KEY'),
    'private_key' => env('JWT_PRIVATE_KEY'),
    'password'    => env('JWT_PASSWORD'),
    //JWT time to live(默认是60)
    'ttl'         => env('JWT_TTL', 86400),
    //Refresh time to live
    'refresh_ttl' => env('JWT_REFRESH_TTL', 20160),
    //JWT hashing algorithm
    'algo'        => env('JWT_ALGO', 'HS256'),
    //token获取方式,数组靠前值优先
    'token_mode'    => ['header', 'cookie', 'param'],
    //黑名单后有效期
    'blacklist_grace_period' => env('BLACKLIST_GRACE_PERIOD', 10),
    'blacklist_storage' => thans\jwt\provider\storage\Tp5::class,
];

这里表示已经存在,可以直接使用.

/**
     * 登录接口
     * @param Request $request
     * @return false|string|\think\response\Json
     * @throws \think\db\exception\DataNotFoundException
     * @throws \think\db\exception\DbException
     * @throws \think\db\exception\ModelNotFoundException
     */
    public  function login(Request $request){
        try {
            $data = input();
            //独立验证器
            validate(\app\homeapi\validate\Login::class)->check($data);
            $list = Db::name('user')->where('user',$data['user'])->find();
            if ($list){
                if ($data['pwd']==$list['pwd']){
                    //参数为用户认证的信息,请自行添加
                    $token = JWTAuth::builder(['id' => $list['id']]);
                    //记录日志
                    Log::record($list['id'].'登录了');
                    return success(200,'登录成功',['token'=>$token]);
                }else{
                    abort(2002,'密码错误');
                }
            }else{
                abort(2002,'用户名错误');
            }
        }catch(HttpException $exception){
            //fail/success是自己封装的接口格式
            return fail(2002,$exception->getMessage());
        }catch (ValidateException $e) {
            // 验证失败 输出错误信息
            return fail(2002,$e->getError());
        }
    }

在中间件里只需要简单的两三行代码就可以解决:

<?php
declare (strict_types = 1);

namespace app\adminapi\middleware;

use thans\jwt\exception\TokenInvalidException;
use thans\jwt\facade\JWTAuth;
use think\Response;

class login
{
    /**
     * 处理请求
     *
     * @param \think\Request $request
     * @param \Closure       $next
     * @return Response
     */
    public function handle($request, \Closure $next)
    {
        try {
            //可以获取请求中的完整token字符串
            $tokenStr = JWTAuth::token()->get();
            //可验证token, 并获取token中的payload部分
            $payload = JWTAuth::auth();
            return $next($request);
        }catch (\Error $e){
            //fail(common文件中自己封装的接口格式)
            return fail(2002,'请先登录');
        }catch (TokenInvalidException $exception){
            return fail(2002,'无效的Token');
        }
    }
}

这里需要引入try{}catch(){},给出对应的提示

对应的提示是“请先登录”

?

?对应的是“Token值无效”,这里我手动在令牌里删减了一部分值导致出现的结果,可以看出明显的效果。

这里表示token已经过期

?退出登录:

public function logout(){
        try {
            //获取token
            $token = JWTAuth::token()->get();
            //放入黑名单
            JWTAuth::invalidate($token);
            return fail('201','退出登录');
        }catch (\Error $exception){
            return fail('202','没有获取到token值');
        }

    }

只需要把获取到的token值放入到黑名单中就可以做到让token失效的效果。

详情可跳转:JWT-AUTH · tp6-jwtauth · 看云

  开发测试 最新文章
pytest系列——allure之生成测试报告(Wind
某大厂软件测试岗一面笔试题+二面问答题面试
iperf 学习笔记
关于Python中使用selenium八大定位方法
【软件测试】为什么提升不了?8年测试总结再
软件测试复习
PHP笔记-Smarty模板引擎的使用
C++Test使用入门
【Java】单元测试
Net core 3.x 获取客户端地址
上一篇文章      下一篇文章      查看所有文章
加:2022-01-04 13:44:26  更:2022-01-04 13:44:34 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/17 21:55:38-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码