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]);
}
分类:
编程开发 - PHP
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 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客户端字体问题的一点心得