Laravel中前后端分离,调用API认证,如何修改 Passport Personal Access Token 过期时间?

1. laravel版本是Laravel6.x,认证方式是Passport

2. 请问Laravel中前后端分离,调用API认证,如何修改 Passport Personal Access Token 过期时间

class AppServiceProvider extends ServiceProvider
{

    /**
     * Bootstrap any application services.
     *
     * @return void
     */
    public function boot()
    {
        //登录2小时后过期
        $this->app->get(AuthorizationServer::class)
            ->enableGrantType(
                new PersonalAccessGrant(),
                new \DateInterval('PT2H')
            );
    }
}
$user = Auth::guard('web_audit')->user();
$tokenResult = $user->createToken('Personal Access Token', 'user');

3. 期待结果:希望能够在任意api接口调用后的2小时未操作后,认证再过期。

4. 实际结果:初次登录后,只要两小时后就会认证失效。

《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 18

你用的是哪一块的认证呢? 如果是 passport 的话, 用的是 password 方式的, 修改 oauth_access_tokens 表的 expires_at

$token = $user->token();
$token->update(['expires_at' => '两小时后']);
1年前 评论
Partrick (楼主) 1年前
Partrick (楼主) 1年前

得看你使用了那种认证方式

1年前 评论
Partrick (楼主) 1年前
陈先生

不要尝试去变更 Token 的过期时间,这不是一个合理的行为。

正确的处理方式应该是销毁旧的 token,重新签发一个新的 Token。

例如在 Token 过期的半分钟内如果发了请求,就会销毁当前正在使用的 Token,同时签发新的 Token。

如果使用 Token 来做鉴权,建议参照 JWT 中对于 Token 的规范。

1年前 评论

正确做法是监听401并用刷新令牌刷新token,如果刷新令牌也失效,那就重新登录,刷新令牌一般比token拥有更长的有效期,可以做到在适当的时间内永不退出

1年前 评论
Partrick (楼主) 1年前
Partrick (楼主) 1年前
Imuyu (作者) 1年前
Partrick (楼主) 1年前
Partrick (楼主) 1年前

可以通过中间件实现

        $token = $user->token();
        $tokenRepository = app(TokenRepository::class);
        if (Carbon::now()->gt($token->expires_at)){
            $tokenRepository->revokeAccessToken($token->id);
        }
        $token->update(['expires_at' => Carbon::now()->addMinutes(1)]);
        $token->save();
1年前 评论
1年前 评论
Partrick (楼主) 1年前

你这种只能在服务器存token的过期时间,每次请求过来判断有没有过期,不能用jwt自带的过期时间。 核心就是中心化延长过期时间

1年前 评论

这种在服务刷新过期时间不是很好吧,并发量大了还是有影响的,前后端分离的还是前端直接在请求时效验是否2小时内有操作没有,超2小时直接发起注销动作,让服务器上的失效,
服务器上效验比较适合前后一体的非token认证。如cookie认证等

1年前 评论
Partrick (楼主) 1年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!