Ali*_*afi 6 php cookies laravel laravel-socialite
我正在使用 Laravel Framework 5.6 版实现在线预订系统并Laravel Socialite实现 gmail 登录。
我有一个方法可以在预订之前检查用户是否登录,或者通过 redis 和 cookie 放置reserveData并redirectUrl指定uniqid以在登录后获取它:
public function checkAuthentication(Request $request)\n{\n $reserveData = json_decode($request->input(\'reserveData\'), true);\n Session::put(\'reserveData\', $reserveData);\n\n if (!Auth::check()) {\n $reserveID = uniqid();\n Cookie::queue(Cookie::forget(\'reserveID\'));\n Cookie::queue(Cookie::make(\'reserveID\', $reserveID, 1440));\n\n $stepData = [\n \'redirectUrl\' => route(\'reserve\', [\'productId\' => $reserveData[\'productId\']]),\n \'reserveData\' => $reserveData\n ];\n\n Redis::set($reserveID, serialize($stepData));\n\n return redirect()->route(\'redirectToGmail\');\n }\n\n return redirect()->route(\'reserve\', [\'productId\' => $reserveData[\'productId\']]);\n}\nRun Code Online (Sandbox Code Playgroud)\n\n重定向到Gmail:
\n\npublic function redirectToGmail()\n{\n return Socialite::driver(\'google\')->redirect();\n}\nRun Code Online (Sandbox Code Playgroud)\n\n问题是,仅在用户第一次尝试登录时uniqid从 gmail 返回后,cookie 中不存在:
public function login()\n{\n $user = Socialite::driver(\'google\')->stateless()->user();\n dd(Cookie::get());\n}\nRun Code Online (Sandbox Code Playgroud)\n\n这是我dd(Cookie::get());从 gmail 返回后的输出:
array:4 [\xe2\x96\xbc\n "XSRF-TOKEN" => "DxiHpLSqB8juOkdLSptORyXs2XGggwWuY4tKJDkz"\n "project_session" => "Gy7p3nhUNGF9D34FmWYxyvewb6juiDNSVLXWTDvS"\n "__cfduid" => null\n]\nRun Code Online (Sandbox Code Playgroud)\n
Laravel 默认情况下将方法domain的参数设置Cookie::make()为当前主机地址,其中包含www.子域。通过调用getHost()方法可以看到:
request()->getHost(); // returns e.g. www.yourdomain.com
Run Code Online (Sandbox Code Playgroud)
我已经在 gmail 服务中注册的返回网址是mydomain.com/return/url。我设置了 cookie,但没有向其传递任何域,因此设置的默认主机地址与 gmail 中的注册域不同。
我从 gmail 中删除了以前的域 (mydomain.com/return/url) 并将其注册为www.子域 (www.mydomain.com/return/url)。另外,我将path和domain参数传递给Cookie::make()方法,它的工作方式就像一个魅力;) :
Cookie::queue(Cookie::forget('reserveID', '/', $request->getHost()));
Cookie::queue(Cookie::make('reserveID', $reserveID, 1440, '/', $request->getHost()));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
452 次 |
| 最近记录: |