laravel使用passport做接口认证设置过期时间问题

2019年7月27日 0 条评论 955 次阅读 1 人点赞

前言:现在的开发当中自然少不了接口的编写,我们需要使用一些验证规则来对我们的接口来进行限制访问,这里面就涉及到了一些接口认证的插件了,上次我在博客中讲了怎么去使用passport来做接口的认证,但是上次的博客中似乎没有提到passport的token过期时间问题,其实是我的前端知识较浅,我以为前端不能实时获取我的token来放在请求头,所以我就默认原来passport的配置(默认过期时间为一年)不修改他的过期时间了,随着这一段时间对前端的知识慢慢了解,知道前端也可以像后端一样定义变量,实时获取了,然后我就去研究了一番这个passport所谓的token怎么在一定的时间内让他过期了,刚开始我看了passport的底层源码,发现他有写token的方法,我一想着挺简单啊,东西都写好了,我直接拿出来用不就行了么?

这是passport底层封装的token过期方法:

passport底层封装的token过期时间方法

但是问题来了,我在AuthServiceProvider.php里面的boot方法中添加了这两个方法,并且传出对应的值,可是还是不生效,这就很头大了,这执行不到咋整,然后我就去找了谷爹、度娘询问究竟,最后在phphub上找到了我想要的答案,原来是需要在AppServiceProvider.php这个文件中的boot方法中去实现设置我们的token时间,其实具体原理到这我就不太清楚了,我就知道这样写能达到我想要的效果,在AppServiceProvider.php中的boot方法中加入如下代码:

<?php
use Laravel\Passport\Bridge\PersonalAccessGrant;
use League\OAuth2\Server\AuthorizationServer;

......

public function boot()
{
//设置token过期时间为60秒
        $this->app->get(AuthorizationServer::class)
            ->enableGrantType(new PersonalAccessGrant(), new \DateInterval('PT60S'));
}

如图:

AppServiceProvider.php中设置token过期时间

这里的TP60S其实是PHP里的DateInterval类(点此查看DateInterval类),表示一个时间周期的类,其实我也很纳闷,现在不是有Carbon的写法么,为啥要用这么死板的写法,后面想想其实有可能在开发这个功能的时候还没有Carbon这个函数呢,到此,passport设置token过期时间就结束了,尽情的使用postman去测试吧!

梁桂锋

来自西京学院大三的小开发者。

文章评论(0)