具有 JWT cookie 失效的无状态 API
Stateless API with JWT cookie invalidation
我玩了几天无状态 Laravel API 基于 JWT 的身份验证,我将令牌存储在 cookie 中。
一切正常,除了 cookie(在)验证...
我的 cookie 是这样设置的
Cookie::queue(Cookies::NAME, $token, (int) env('COOKIE_VALIDITY'), Cookies::PATH, env('COOKIE_DOMAIN'), env('COOKIE_SECURE'), Cookies::HTTPONLY, Cookies::RAW, Cookies::SAMESITE);
$redirectUrl = $request->query('redirectTo') ?? route('home');
return redirect($redirectUrl);
这有效,它确实设置了 cookie。
但是,我的 cookie Expires/Max-Age 似乎总是晚了一个小时。
2019-10-12T08:51:35.737Z
(实际上是9:51)
不过,cookie 会在所有后续请求中正确发送。
然而,最大的问题是 cookie 失效。
我的注销操作如下所示
return redirect('/login')->withCookies([Cookie::forget(Cookies::NAME)]);
操作被调用,但 cookie 保持不变。
我也尝试使用 cookie()->forget()
助手,结果相同。
关于我在这里做错了什么的任何线索?
Ps:我确实看到 laravel 默认情况下也添加了一个 session cookie,我想这是正常的,因为我是作为一个匿名用户并因此收到 session?
我问是因为对我来说挑战是拥有一个完全无状态的 API,它只使用服务器端呈现的登录页面,然后重定向回某种 SPA。
非常感谢所有帮助。
麻烦问一下,我已经找到问题了。
显然,指定 cookie 名称是不够的。
return redirect('/login')->withCookies([Cookie::forget(Cookies::NAME, Cookies::PATH, env('COOKIE_DOMAIN'))]);
完美运行。
我玩了几天无状态 Laravel API 基于 JWT 的身份验证,我将令牌存储在 cookie 中。
一切正常,除了 cookie(在)验证...
我的 cookie 是这样设置的
Cookie::queue(Cookies::NAME, $token, (int) env('COOKIE_VALIDITY'), Cookies::PATH, env('COOKIE_DOMAIN'), env('COOKIE_SECURE'), Cookies::HTTPONLY, Cookies::RAW, Cookies::SAMESITE);
$redirectUrl = $request->query('redirectTo') ?? route('home');
return redirect($redirectUrl);
这有效,它确实设置了 cookie。
但是,我的 cookie Expires/Max-Age 似乎总是晚了一个小时。
2019-10-12T08:51:35.737Z
(实际上是9:51)
不过,cookie 会在所有后续请求中正确发送。
然而,最大的问题是 cookie 失效。 我的注销操作如下所示
return redirect('/login')->withCookies([Cookie::forget(Cookies::NAME)]);
操作被调用,但 cookie 保持不变。
我也尝试使用 cookie()->forget()
助手,结果相同。
关于我在这里做错了什么的任何线索?
Ps:我确实看到 laravel 默认情况下也添加了一个 session cookie,我想这是正常的,因为我是作为一个匿名用户并因此收到 session? 我问是因为对我来说挑战是拥有一个完全无状态的 API,它只使用服务器端呈现的登录页面,然后重定向回某种 SPA。
非常感谢所有帮助。
麻烦问一下,我已经找到问题了。 显然,指定 cookie 名称是不够的。
return redirect('/login')->withCookies([Cookie::forget(Cookies::NAME, Cookies::PATH, env('COOKIE_DOMAIN'))]);
完美运行。