我将我的 Laravel 应用程序部署到共享主机(cpanel)。对于付款,用户首先重定向到银行帐户,然后重定向到我的页面。在此过程中,用户将被注销!
为了保护我的路由,我使用 auth 中间件,而对于会话驱动程序,我使用默认的会话驱动程序文件。此外,框架/会话的权限为 777。
这是重定向到银行页面的代码:
$go = "https://thebank/example";
redirect()->to($go)->send();
Run Code Online (Sandbox Code Playgroud)
付款成功后,银行会重定向到我指定的用于验证付款的路线。
Route::get('/payment/callBack' , 'PaymentController@VerifyData')->middleware('auth');
Run Code Online (Sandbox Code Playgroud)
该路由使用 auth 中间件,但是大多数时候用户没有登录并自动重定向到登录页面。我注意到如果我不使用 auth 中间件,并且如果用户刷新用户自动登录的页面。这不是 Laravel 通常会发生的事情。我还尝试了会话的 cookie 驱动程序,但它不起作用并导致了更多问题。
我在默认的 PHP $_SESSION 中存储 user_id 和 cart_id 也没有取得任何成功。当用户从银行页面重定向回来时,所有会话似乎都被清除了。
我该如何解决这个问题?
Laravel 7 的变化
我们的软件包与 Laravel 7 兼容,但在默认 Laravel 安装中更改了 same_site 设置,请确保您更改same_site为nullin
config/session.php或回调将不包含 cookie,并且您将在付款完成后注销。所以在你的config/session.php更新里面
return [
...
...
'same_site' => null,
...
...
];
Run Code Online (Sandbox Code Playgroud)
这是我自己解决的一个非常老的问题,但忘记分享解决方案。但是,我看到此页面仍然处于活动状态,我决定分享我的解决方案。
我的问题实际上是重定向 URL 的协议。我的错误是我将重定向 URL 设置为'/payment/callBack'to http。虽然我的网站是https. https和 的会话http不同,因此登录的用户https无法登录到http。我的解决方案是首先将 URL 回调更正为 https 版本。并设置 nginx 配置以将所有内容重定向http到https.