添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

在使用laravel时候 摒弃了自带的Auth和passport。主要原因是项目前后端分离,后端写api接口,另外email不做登录选项,password和用户信息存储分开存。在使用JWT过程中遇到很多的坑。
坑1 不能用JWTAuth静态调用
直接

public function xxx (JWTAuth $jwt){
    $jwt->xxx;
 

这里的JWTAuth是

use Tymon\JWTAuth\JWTAuth;

感兴趣的可以看看 JWT.php 和JWTAuth.php这两个文件

坑2 token过期自动刷新

token有两个有效期,在config/jwt.php下面

'ttl' => env('JWT_TTL', 60),
'refresh_ttl' => env('JWT_REFRESH_TTL', 20160),

这假设用户登录,半个月内登录有效,那么这里的半个月是refresh_ttl,ttl是什么呢?ttl是单个签发的token有效期。
你半个月内可以有n个token,毕竟1个小时就过期,这时候过期不是真正过期,可以进行签发新token。
看了很多文档,大体上就写了个refresh token的接口
其实JWT在处理时候,如果token过期,你没有进行try catch处理,这里会报错的。而且前端没有获取到新token需要存储。

public function tokenValidator(&$request,$jwt){
        #检测request中header头是否带了token
        if(is_null($token = \request() ->header('authorization'))){
            $this->response(400,'Authorization Failed,未携带Authorization');
        #提取token中用户数据
            $user = $jwt->parseToken()->toUser()->toArray();
            if(! $user){
                $this->response(200,'用户不存在','');
        }catch (TokenExpiredException $exception){
            #异常处理 token过有效期,进行刷新
                $token = $jwt->refresh();
                $access_token = 'Bearer'.$token;
                $request->headers->set('Authorization',$access_token);
            }catch(JWTException $exception){
                #refresh 也过期,重新登录
                $this->response(400,'Authorization过期,重新登录');
 

token如果过期,通过TokenExpiredException 可以catch到异常然后进行刷新token,刷新token又不能这时候response给前端,因为你用户登录有效期没过,这个接口得继续往下走,那么在request header头里加上这个token,后面接口使用时候就是新token,但是后面接口在返回时候又要带上新token给前端,让前端进行存储。

总觉得自己写的代码号low

Laravel(Lumen)中使用JWT-Auth遇到一个问题,即token如何刷新。 一开始不太理解作者的设计思想,看了很多issue之后,慢慢明白jwt-refresh如何使用。 建一个路由,比如“auth/refresh-token” ,可以指向某个方法,也可以直接写个匿名函数。 $app->post('auth/refresh-token', ['middleware token刷新前端安全中必要的一部分,本文从后端到前端整个流程介绍如何实现无感刷新token。页面代码亲自实现并跑通,请放心食用。如需源码,请在评论区留言。!!新建 config/constant.js/* localStorage存储字段 *///短token//长token、/* HTTP请求头字段 *///存放短token//存放长token新建 config/returnCodeMap.js// 在其它客户端被登录// 重新登陆// token过期//接口请求成功。 问题Laravel 会对所有的 POST 数据默认开启 CSRF 防护,实现的机制是检测 POST 数据里的 _token 信息。问题是:CSRF _token过期时间是多久?回答会在每一次 Session 创建时重新生成,也就是说,跟会话的时间一致,Laravel 默认为 120 分钟,可以通过修改 config/session.php 文件里的 lifetime 修改。来源...class... 嗨,我在前端使用角度js,在后端使用带有tymon jwt库的卫星和laravel.我正在使用jwt身份验证.我想在我的网络应用程序中记住我的功能.我看到’ttl’在laravel’config / jwt.php中设置令牌的到期时间./*|--------------------------------------------------------------------------| JWT... 需求:前后端分离状态下,登录失效(token过期)后,前端需要知道下一步是跳转到登录页面还是使用refresh_token刷新token。这就需要后端根据是否可以刷新token(refresh_token是否过期)返回不同的标识,以供前端进行下一步操作。具体做法如下:1、新建RefreshToken中间件,每次登陆成功后查询是否保存了token和id的对应关系(登录失效后无法通过token获取对应... 在使用laravel时候 摒弃了自带的Auth和passport。主要原因是项目前后端分离,后端写api接口,另外email不做登录选项,password和用户信息存储分开存。在使用JWT过程中遇到很多的1 不能用JWTAuth静态调用直接public function xxx (JWTAuth $jwt){$jwt->xxx;}这里的JWTAuth是use Tymon\JWTAut... token如何刷新在PHP框架Laravel中安装了扩展JWT-Auth,你可能会遇到一个问题,即token该如何刷新。可能很多人都不太理解作者的设计思想,包括我在内,但是看了很多issue之后,你就会慢慢的明白jwt-refresh是如何使用的咯,下面来给大家讲解一下。首先create一个路由,比如“auth/refresh-token” ,你可以指向某个方法,也可以直接写个匿名函数。这里个人是... "message": "Token has expired", "exception": "Tymon\\JWTAuth\\Exceptions\\TokenExpiredException", "file": "D:\\Work\\Laravel\\SDUTdingding\\2_back-end\\vendor\\tymon\\jwt- 需求:前后端分离状态下,登录失效(token过期)后,前端需要知道下一步是跳转到登录页面还是使用refresh_token刷新token。 这就需要后端根据是否可以刷新token(refresh_token是否过期返回不同的标识,以供前端进行下一步操作。 具体做法如下: 1、新建RefreshToken中间件,每次登陆成功后查询是否保存了token和id的对应关系(登录失效后无法... use Illuminate\Http\Request; use App\Http\Controllers\Controller; use Illuminate\Support\Facades\DB; define('TOKEN', 'yunlive11'); class WxresponseMsg extends Controller protecte. 先说一下我的需求吧,我想要做一个多账号认证系统,也就是说一个用户可以以多中形态登录,但是很多人设计表的时候就一张,这样扩展很麻烦,比如同一个用户,用微信登录怎么办,比如说使用qq注册,所以我这里设计的是,有一个users表存储用户的主账号这里存储一些用户的基础信息,比如说性别,手机号(这个东西唯一来弄),然后我再设计一个account表,这个东西来存储用户的账户,账户可以多个,这样就形成了一对多的关系。针对关系表,要对account表进行认证系统。 1、jwt是什么。如果不知道会显得很low,所以要最起码知