Laravel 7 奇怪的注销问题
Laravel 7 Weird Logout Issue
我刚刚完成了一个 Laravel 7 应用程序。完成付款后,我现在遇到了奇怪的问题。我将 LOGGED IN USER 发送到支付网关,用户付款,网关将用户作为 POST 请求发送回网站。但从未调用网站响应操作。由于它在 auth 中间件下,用户不知道如何注销并发送到登录屏幕。
路由定义如下:
<?php
Route::middleware('auth')->group(function () {
// This sends the user to gateway
Route::post('subscription', 'SubscriptionController@renew')->name('subscription.renew');
// Gateway sends the user back here
Route::post('subscription/process', 'SubscriptionController@process')->name('subscription.process');
});
正在检查有关跃点的网络选项卡如下:
POST http://localhost:8000/subscription -> 302 << gateway >>
<< gateway >> -> POST http://localhost:8000/subscription/process -> 302 http://localhost:8000/login
在应用发送到 http://localhost:8000/login 的响应中,headers 有 laravel_session
需要的 cookie。
但是操作 http://localhost:8000/subscription/process 从未被调用并且用户被注销。使用相同的支付网关 Laravel 6 之前从未遇到过此类问题。
此外,我还在 URL 下面添加到 VerifyCsrfToken
中间件,一开始它是抛出 419。
<?php
namespace App\Http\Middleware;
use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as Middleware;
class VerifyCsrfToken extends Middleware
{
protected $except = [
'/subscription/process',
];
}
谁能解释一下可能是什么原因?
发现了!这是由于 SameSite=Lax
在 Laravel 7 会话 cookie 中默认设置,如 https://github.com/laravel/laravel/commit/2913a55d87461fabe94907c5728d7a9451bcae80 提交。
我刚刚完成了一个 Laravel 7 应用程序。完成付款后,我现在遇到了奇怪的问题。我将 LOGGED IN USER 发送到支付网关,用户付款,网关将用户作为 POST 请求发送回网站。但从未调用网站响应操作。由于它在 auth 中间件下,用户不知道如何注销并发送到登录屏幕。
路由定义如下:
<?php
Route::middleware('auth')->group(function () {
// This sends the user to gateway
Route::post('subscription', 'SubscriptionController@renew')->name('subscription.renew');
// Gateway sends the user back here
Route::post('subscription/process', 'SubscriptionController@process')->name('subscription.process');
});
正在检查有关跃点的网络选项卡如下:
POST http://localhost:8000/subscription -> 302 << gateway >>
<< gateway >> -> POST http://localhost:8000/subscription/process -> 302 http://localhost:8000/login
在应用发送到 http://localhost:8000/login 的响应中,headers 有 laravel_session
需要的 cookie。
但是操作 http://localhost:8000/subscription/process 从未被调用并且用户被注销。使用相同的支付网关 Laravel 6 之前从未遇到过此类问题。
此外,我还在 URL 下面添加到 VerifyCsrfToken
中间件,一开始它是抛出 419。
<?php
namespace App\Http\Middleware;
use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as Middleware;
class VerifyCsrfToken extends Middleware
{
protected $except = [
'/subscription/process',
];
}
谁能解释一下可能是什么原因?
发现了!这是由于 SameSite=Lax
在 Laravel 7 会话 cookie 中默认设置,如 https://github.com/laravel/laravel/commit/2913a55d87461fabe94907c5728d7a9451bcae80 提交。