Laravel (Lumen) 解决JWT-Auth刷新token的问题


Posted in PHP onOctober 24, 2019

Laravel(Lumen)中使用JWT-Auth遇到一个问题,即token如何刷新。

一开始不太理解作者的设计思想,看了很多issue之后,慢慢明白jwt-refresh如何使用。

建一个路由,比如“auth/refresh-token” ,可以指向某个方法,也可以直接写个匿名函数。

$app->post('auth/refresh-token', ['middleware' => 'jwt.refresh', function() {
  try {
    $old_token = JWTAuth::getToken();
    $token = JWTAuth::refresh($old_token);
    JWTAuth::invalidate($old_token);
  } catch (TokenExpiredException $e) {
    throw new AuthException(
      Constants::get('error_code.refresh_token_expired'),
      trans('errors.refresh_token_expired'), $e);
  } catch (JWTException $e) {
    throw new AuthException(
      Constants::get('error_code.token_invalid'),
      trans('errors.token_invalid'), $e);
  }
 
  return response()->json(compact('token'));
}]);

当token失效之后,访问这个地址,把旧token带上,会得到一个新的token。自己将新token保存,访问api时使用新token。如此反复。

虽然token的有效很短,默认是一个小时,但是刷新时间长达两个星期,还算可以,总比重复登录来得方便。

客户端登录之后只要保存token,减少了被获取用户名密码的风险。

这个地方有个bug,就是旧token虽然不能再使用,但是却可以用来获取新token。这个问题在0.6版中被修复。如果着急这个问题可以使用0.6版。

一开始以为一个token刷新之后可以接着用,原来是换个新token,不知道接着用的思想是否可行。

以上这篇Laravel (Lumen) 解决JWT-Auth刷新token的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
mysql中存储过程、函数的一些问题
Feb 14 PHP
PHP入门速成教程
Mar 19 PHP
php获取网页内容方法总结
Dec 04 PHP
PHP操作数组相关函数
Feb 03 PHP
解析smarty 截取字符串函数 truncate的用法介绍
Jun 20 PHP
PHP取整函数:ceil,floor,round,intval的区别详细解析
Aug 31 PHP
php中隐形字符65279(utf-8的BOM头)问题
Aug 16 PHP
PHP使用mkdir创建多级目录的方法
Dec 22 PHP
从性能方面考虑PHP下载远程文件的3种方法
Dec 29 PHP
给PHP开发者的编程指南 第一部分降低复杂程度
Jan 18 PHP
mac系统下为 php 添加 pcntl 扩展
Aug 28 PHP
thinkphp框架表单数组实现图片批量上传功能示例
Apr 04 PHP
laravel5.1 ajax post 传值_token示例
Oct 24 #PHP
laravel 5.5 关闭token的3种实现方式
Oct 24 #PHP
Thinkphp 3.2框架使用Redis的方法详解
Oct 24 #PHP
laravel解决迁移文件一次删除创建字段报错的问题
Oct 24 #PHP
PHP Swoole异步读取、写入文件操作示例
Oct 24 #PHP
PHP Swoole异步Redis客户端实现方法示例
Oct 24 #PHP
Laravel自动生成UUID,从建表到使用详解
Oct 24 #PHP
You might like
php 数组的指针操作实现代码
2011/02/08 PHP
探寻PHP脚本不报错的原因
2014/06/12 PHP
PHP错误Allowed memory size of 67108864 bytes exhausted的3种解决办法
2014/07/28 PHP
php工具型代码之印章抠图
2018/07/18 PHP
使用PHP+Redis实现延迟任务,实现自动取消订单功能
2019/11/21 PHP
Javascript的一种模块模式
2010/09/08 Javascript
javascript window.open打开新窗口后无法再次打开该窗口问题的解决方法
2014/04/12 Javascript
Javascript基础教程之变量
2015/01/18 Javascript
原生js实现图片轮播特效
2015/12/18 Javascript
Javascript类型系统之undefined和null浅析
2016/07/13 Javascript
手机Web APP如何实现分享多平台功能
2016/08/19 Javascript
微信小程序实现点击效果
2019/06/21 Javascript
mpvue 页面预加载新增preLoad生命周期的两种方式
2019/10/17 Javascript
javascript利用键盘控制小方块的移动
2020/04/20 Javascript
vue自定义指令限制输入框输入值的步骤与完整代码
2020/08/30 Javascript
js实现删除json中指定的元素
2020/09/22 Javascript
javascript canvas封装动态时钟
2020/09/30 Javascript
[02:57]2014DOTA2国际邀请赛 选手辛苦解说更辛苦
2014/07/10 DOTA
Python操作列表之List.insert()方法的使用
2015/05/20 Python
Linux下python与C++使用dlib实现人脸检测
2018/06/29 Python
opencv python 傅里叶变换的使用
2018/07/21 Python
Django 全局的static和templates的使用详解
2019/07/19 Python
Django Admin中增加导出CSV功能过程解析
2019/09/04 Python
Pycharm中出现ImportError:DLL load failed:找不到指定模块的解决方法
2019/09/17 Python
浅析Python+OpenCV使用摄像头追踪人脸面部血液变化实现脉搏评估
2019/10/17 Python
Python通过正则库爬取淘宝商品信息代码实例
2020/03/02 Python
python操作yaml说明
2020/04/08 Python
网络工程师面试(三木通信技术有限公司)
2013/06/05 面试题
一道输出判断型Java面试题
2014/10/01 面试题
求职自荐信范文格式
2013/11/29 职场文书
食品工程专业求职信
2014/06/15 职场文书
小学生读书活动总结
2014/06/30 职场文书
幼儿园八一建军节活动方案
2014/08/27 职场文书
2016十一国庆节感言
2015/12/09 职场文书
汽车销售合同文本
2019/08/08 职场文书
Win11怎么修改电源模式?Win11修改电源模式的方法
2022/04/05 数码科技