随笔 - 612, 文章 - 0, 评论 - 31, 阅读 - 74万

导航

< 2025年3月 >
23 24 25 26 27 28 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 26 27 28 29
30 31 1 2 3 4 5

利用PHP-JWT实现token及刷新token

Posted on   eastson  阅读(2164)  评论(0编辑  收藏  举报

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]);
}
相关博文:
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 字符编码:从基础到乱码解决
历史上的今天:
2014-05-10 How to authenticate a user by uid and password?
2014-05-10 LDAP 中 CN,OU,DC 的含意
2014-05-10 Apache Directory Studio
2014-05-10 LDAP编辑器 LDAPAdmin
2013-05-10 Windows XP下获取OpenERP源码
2013-05-10 关于OpenERP客户端字体问题的一点心得
点击右上角即可分享
微信分享提示