【发布时间】:2021-07-11 12:15:58
【问题描述】:
我使用 Laravel 6 和 GuzzleHTTP 7。
我可以设法向外部 (REST-) API 发出请求并成功授权并取回令牌:
{"access_token":"FooXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE2MjExNjkyNDQsImlhdCI6MTYxODU3aNzI0NCwibmJmIjoxNjE4NTc3MjQ0LCJpZGVudGl0eSI6MTQzfQ.wdDzVbE-5O8mfsIqzNvXFpv7THkYYp522HMpyEc8LX0BAR"}
我必须在会话中明确保存此令牌吗? 我正在尝试在对外部 API 的每个后续请求中使用此令牌。
通过谷歌搜索,我只找到了 Laravel 如何生成 JWT 的教程,而不是当 Laravel 用作客户端并请求 JWT 时如何继续。
非常感谢任何帮助!
更新:Laravel APP 本身就是客户端(不管“内部”Laravel 的用户如何)。
【问题讨论】:
-
如果您的应用程序本身就是客户端并且无论哪个用户向您的应用程序发出请求,那么将令牌存储在数据库或持久性(ish)缓存中。如果令牌基于哪个用户向您的应用发出请求(例如,如果生成 JWT 令牌以代表用户发出请求,这意味着每个用户不同)然后将其存储在会话中
-
我同意,如果你的 laravel 应用程序没有被分离为后端和前端,那么你可以使用数据库或者我更喜欢缓存,如 memcached 或 redis 来保存会话,如果注销然后清除它
-
刷新 JWT 令牌时会发生什么,例如。月?有没有办法保持令牌有效,例如。自动替换为新令牌?
-
我个人将数据库缓存驱动程序用于持续时间更长的事情。您可以使用
Cache::driver('database')->remember('jwt_token', 2629746, function() { /* get the token */ })之类的东西,因此无论在何处运行此代码,如果缓存中没有令牌或缓存中的令牌已过期,它将获得一个新令牌。不过你需要事先set up the database as a cache -
每当您获取 jwt 代码时检查时间,如果当前时间比到期时间少 5 分钟,则更新令牌