• 利用PHPJWT实现token及刷新token


    php-jwt是一个非常好用的token机制,它配合app可实现安全性的用户鉴权问题,但是token都有一个过期时间,如果过期了,如何让用户无感知进行刷新呢?其实这个主要是在前端进行判断,如果token过期,后端肯定会给前端返回一个过期提示,同时我们定义一个错误码来标识,如:1002,那前端拿到这个标识进行判断,如果过期,则去调用刷新接口,具体看下面的代码:

    ThinkPHP框架中使用jwt技术来实现Token令牌

    首先,通过composer进行安装:

    composer require thans/tp-jwt-auth
    

    然后生成配置文件:

    php think jwt:create
    

    第一次登录请求token:

    function get_token() {
        $.ajax({
            type: "GET",
            url: "{:url('index/index/token')}",
            dataType: "json",    
            success: (res) => {
                localStorage.setItem('token', res.token)
            }
        })
    }
    

    对应控制器的代码:

    use thans\jwt\facade\JWTAuth;
    
    public function token()
    {
        $token = JWTAuth::builder(['userInfo' => ['id' => 1, 'username' => 'jeevin']]);
        return json(['code' => 200, 'msg' => 'success', 'token' => $token]);;
    }
    

    然后可以带上token就可以请求接口的具体信息了。

    function get_user() {
        let isRefreshing = true;//防止重新请求接口
        $.ajax({
            type: "GET",
            url: "{:url('index/index/user')}",
            data: {token: localStorage.getItem('token')},
            dataType: "json",
            success: (res) => {
                if(res.code == 1002) {
                    if(isRefreshing){
                        refreshTokenRequst()//如果过期重新请求接口
                    }
                }
                isRefreshing = false;
            }
        })
    }
    function refreshTokenRequst() {
        $.ajax({
            type: "GET",
            url: "{:url('index/index/refesh_token')}",
            data: {token: localStorage.getItem('token')},
            dataType: "json",
            success: (res) => {
                if(res.code == 200) {
                    localStorage.setItem('token', res.token)
                }
            }
        })
    }
    

    对应控制器的代码:

    //用户信息
    public function user()
    {
        try{
        $token = JWTAuth::auth();
        return json(['code' => 200, 'msg' => '成功', 'token' =>$token]);
        }catch(\thans\jwt\exception\TokenExpiredException $e){
        return json(['code' => 1002, 'msg' => 'token已过期']);
        }catch(\Exception $e){
        return json(['code' => 400, 'msg' => $e->getMessage()]);
        }
    }
    
    //刷新token接口
    public function RefeshToken()
    {
        $token = JWTAuth::refresh();
        return json(['code' => 200, 'msg' => '成功', 'token' =>$token]);
    }
    
  • 相关阅读:
    Python在计算内存时应该注意的问题?
    如何高效地远程部署?自动化运维利器 Fabric 教程
    强大的 Python 任务自动化工具!invoke 十分钟入门指南
    进一步学习 nox 教程,轻松掌握命令行用法
    Oracle Solaris 11.4安装桌面/gdb
    Solaris 10上Oracle 10g安装步骤图解
    Oracle Solaris 10图文安装
    读取模式下cbc latch的事件模拟(热块竞争和热链竞争)-P62
    关于位图数据位和系统管理区大小-P6
    关于位图数据和标记位-P3
  • 原文地址:https://www.cnblogs.com/eastson/p/16253495.html
Copyright © 2020-2023  润新知