• 利用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]);
    }
    
  • 相关阅读:
    iOS:分组的表格视图UITableView,可以折叠和展开
    iOS:带主标题、副标题、图像类型的表格视图UITableView
    iOS:多个单元格的删除(方法二):
    iOS:多个单元格的删除(方法一)
    iOS:UITableViewCell自定义单元格
    iOS:删除、插入、移动单元格
    iOS:UITableView表格视图控件
    iOS:UIImageView图像视图控件
    iOS:UIScrollView控件和UIPageControl控件的详解
    淘宝卖家工具推荐
  • 原文地址:https://www.cnblogs.com/eastson/p/16253495.html
Copyright © 2020-2023  润新知