php jwt token刷新方案,吉微博客-Thinkphp5.1利用php-jwt实现token及刷新token

松建本
2023-12-01

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

首先通过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]);

}

 类似资料: