拉威尔护照:增加“;laravel_token";cookie过期时间

拉威尔护照:增加“;laravel_token";cookie过期时间,laravel,laravel-passport,Laravel,Laravel Passport,我在我的项目中实现了Laravel Passport,除了存储令牌的cookie过期时间(仅1小时)之外,一切都很好 我的项目包含一个后端Laravel5.8API(带有LaravelPassport),它提供一个前端SPA应用程序(Vue) my app中的用户可以使用带有Vue组件的页面成功登录,该页面使用用户凭据发出POST请求,如果登录成功,用户将被重定向到新URL(app home)-此重定向是创建“laravel_令牌”的GET请求cookie-由CreateFreshApiToke

我在我的项目中实现了Laravel Passport,除了存储令牌的cookie过期时间(仅1小时)之外,一切都很好

我的项目包含一个后端Laravel5.8API(带有LaravelPassport),它提供一个前端SPA应用程序(Vue)

my app中的用户可以使用带有Vue组件的页面成功登录,该页面使用用户凭据发出POST请求,如果登录成功,用户将被重定向到新URL(app home)-此重定向是创建“laravel_令牌”的GET请求cookie-由
CreateFreshApiToken
中间件创建

从现在起,用户可以在应用程序内的任何地方访问,并且通过ajax调用获得应用程序组件所需的所有数据(Laravel将注意到这些ajax调用中存在cookie“Laravel_token”,并将使用cookie中的JWT识别登录用户)

我的问题是:

用户登录时创建的“laravel_令牌”cookie的生命周期仅为1小时。因为这是一个SPA,所以此cookie永远不会更新(由新的cookie交换,具有新的小时生存期)。。。因此,1小时后,当需要对后端Laravel服务器执行新的ajax请求时,它将收到未经验证的响应-这是有意义的,因为“Laravel_令牌”cookie已经过时

你如何处理这个问题

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

我无法通过ajax调用刷新此cookie,因为这是一个SPA,我没有客户端id,这是客户端的秘密。。。而且因为这个cookie不仅是httponly,而且是由Laravel加密的——所以,我不能用JS的新cookie来交换它

唯一的解决方案是增加此cookie的生存期(例如,从1小时增加到…1年)?你觉得这有什么问题吗?我可以在哪里设置cookie的过期时间?我是否需要扩展
apitonkCookieFactory

我希望用户登录,直到他故意执行注销请求或访问令牌过期(在我的情况下,我使用的是Laravel Passport默认值,是一个1年的长寿令牌)

如果有人能帮我解决这个问题,我将不胜感激

如果您发现我的做法不正确,我也将感谢您的意见和建议


多谢各位

根据
apitonkCookieFactory
从会话生存期值中获取
laravel_令牌的过期时间。

好的,只需根据
apitonkCookieFactory
.env
中更改
SESSION\u生命周期的值,即可从会话生命周期值中获取
laravel\u令牌的过期时间。

好的,只需在AuthServiceProvider中更改
.env

中的
SESSION\u lifety
的值,您就可以配置令牌的生存期-但是我认为使用刷新令牌是更好的方法。你在用axios吗?如果是这样,我见过有人用它来处理401响应和刷新令牌。谢谢senty!但是,在AuthServiceProvider中,我可以配置令牌的生存期,而不是存储令牌的cookie的生存期。我使用jQuery进行ajax调用,而不是axios。我还看到一些人使用axios拦截器,但这不是我的情况。但是,如果Laravel Passport使用cookie存储令牌,并且此cookie由Laravel加密,我如何从浏览器端刷新此cookie(使用jquery或axios,这无关紧要)?我对您的方法非常困惑。所以您并没有使用api与服务器通信,而是使用会话。否则它将是
access\u-token
而不是
laravel\u-token
。你用哪种补助金作为护照?另外,您在Laravel端的身份验证配置是什么?我正在使用api与服务器通信,“Laravel_令牌”是Passport使用的默认cookie名称。它在vendor/laravel/passport/src/passport.php属性$cookie中定义。我的身份验证配置为:“web”=>[“驱动程序”=>“会话”,“提供程序”=>“用户”,],“api”=>[“驱动程序”=>“护照”,“提供程序”=>“用户”,]这在Laravel的文档中:“通常,如果您希望使用JavaScript应用程序中的API,则需要手动向应用程序发送访问令牌,并将其与每个请求一起传递给应用程序。但是,Passport包含一个中间件,可以为您处理此问题。您只需将CreateFreshApitonk中间件添加到app/Http/Kernel.php文件中的web中间件组中“。在您的AuthServiceProvider中,您可以配置令牌的生存期-但是我认为使用刷新令牌将是更好的方法。你在用axios吗?如果是这样,我见过有人用它来处理401响应和刷新令牌。谢谢senty!但是,在AuthServiceProvider中,我可以配置令牌的生存期,而不是存储令牌的cookie的生存期。我使用jQuery进行ajax调用,而不是axios。我还看到一些人使用axios拦截器,但这不是我的情况。但是,如果Laravel Passport使用cookie存储令牌,并且此cookie由Laravel加密,我如何从浏览器端刷新此cookie(使用jquery或axios,这无关紧要)?我对您的方法非常困惑。所以您并没有使用api与服务器通信,而是使用会话。否则它将是
access\u-token
而不是
laravel\u-token
。你用哪种补助金作为护照?还有,你在Laravel方面的身份验证配置是什么