Laravel护照:增加“ laravel_token” cookie的过期时间

时间:2019-05-25 17:06:08

标签: laravel laravel-passport

我在我的项目中实现了Laravel Passport,除了存储令牌的cookie过期时间(即1小时)以外,其他所有功能都正常运行。

我的项目包含一个后端Laravel 5.8 API(带有Laravel Passport),该API服务于前端SPA应用程序(Vue)。

我的应用程序中的用户可以使用带有Vue组件的页面成功登录,该页面使用用户凭据发出POST请求,如果成功完成登录,则将用户重定向到新的URL(应用程序主目录)-这种重定向是由CreateFreshApiToken中间件创建的GET请求,用于创建“ laravel_token” cookie。

从现在开始,用户可以遍历应用程序中的任何位置,并且通过ajax调用获得应用程序组件所需的所有数据(Laravel将注意到在这些ajax调用中存在cookie“ laravel_token”,并将识别已登录的cookie)用户使用该Cookie中存在的JWT)。

我的问题是:

用户登录时创建的“ laravel_token” Cookie的生存期仅为1小时。由于这是SPA,因此该cookie永远不会更新(由新的cookie替换,具有新的小时寿命)...因此,在1小时后,当需要向后端Laravel服务器执行新的ajax请求时,它将收到未经身份验证的响应-这很有意义,因为“ laravel_token” cookie已过时。

您如何处理此问题?

我知道我可以通过在cookie过期之前执行页面的完全刷新/重新加载来刷新cookie,但这对于用户体验而言并不是一个好的解决方案。

我无法通过ajax调用来刷新此cookie,因为这是一个SPA,并且我没有client_id,而且这是客户端的秘密……而且,不仅因为该cookie是httponly,而且它是由Laravel加密-因此,我无法使用JS换成新的。

唯一的解决方案是否会延长Cookie的生存期(例如,从1小时增加到..... 1年)?您看到这个有什么问题吗?在哪里可以设置Cookie的过期时间?我需要扩展ApiTokenCookieFactory类吗?

我希望用户可以登录,直到他故意执行注销请求或access_token过期(就我而言,我使用的是Laravel Passport默认值,这是1年的长期令牌)。

如果有人可以帮助我解决这个问题,我将不胜感激。

如果您发现我的操作方式不正确,也希望您提出建议。

非常感谢您!

1 个答案:

答案 0 :(得分:0)

根据ApiTokenCookieFactorylaravel_token cookie的过期时间是从会话生存期值中获得的。 好吧,只需在SESSION_LIFETIME

中更改.env的值