Laravel Cookie 奇怪的行为 - 总是设置相同的值

TPH*_*hes 3 php cookies laravel laravel-5.6

我在 Laravel 5.6 中设置 cookie 时遇到问题。我目前正在使用 Facebook 登录,一切都按预期工作,只是访问令牌无法正确存储在 Cookie 中。由于某种原因,它不断存储一个我不熟悉的值,我不明白为什么。

为了测试这一点,我修改了回调函数来设置测试 cookie,并且发生了相同的行为。

这是我被调用的路线:

Route::get('{provider}/callback', 'Auth\LoginController@handleProviderCallback');

这是我的handleProviderCallback方法:

public function handleProviderCallback(string $provider)
{
    Cookie::queue(Cookie::make('fb', 'test', 1000, '/', config('session.domain'), config('session.secure'), config('session.http_only')));
    return redirect('/');
}
Run Code Online (Sandbox Code Playgroud)

这是随后设置为的 cookie fbeyJpdiI6IkFROTRzU2ZhTGQwXC9DOHZoR3lqVDZnPT0iLCJ2YWx1ZSI6ImpqWE8wSVpDRzBzT1p2WGxPdE5pYlE9PSIsIm1hYyI6IjA5NzYxODQ0MmFkZmE2NDQ1YmU5Zjg2Y2NmNjU1N2RhZmVmNjcxZjJmYjhmZmViMWEwZGU5NTE5ZDYxMWY2ZjAifQ==

当然,我已经使用实际值进行了尝试,这就是为什么我现在恢复为测试值以查看发生了什么。我尝试清除所有 cookie 和缓存,并在 Chrome 和 Safari 中尝试。

为什么它总是设置 eyJ... 值而不是我告诉它的值?

Kys*_*lik 6

Laravel 默认使用 加密 & Base64 编码所有 cookie App\\Http\\Middleware\\EncryptCookies,因此当您对字符串进行 Base64 解码时,您将得到

\n\n
{"iv":"AQ94sSfaLd0\\/C8vhGyjT6g==","value":"jjXO0IZCG0sOZvXlOtNibQ==","mac":"097618442adfa6445be9f86ccf6557dafef671f2fb8ffeb1a0de9519d611f6f0"} \n
Run Code Online (Sandbox Code Playgroud)\n\n

这是加密数据,实际上只是jjXO0IZCG0sOZvXlOtNibQ==加密了,剩下的只是用于解密的元数据APP_KEY。\n而且值jjXO0IZCG0sOZvXlOtNibQ==是base64编码的,解码后得到的5\xd0\x86BKf:bm真正的加密值。

\n\n
\n

注意eyJbase64 解码是JSON{"开头。

\n
\n\n

您可以在此答案/sf/answers/3461191121/中详细了解应用程序密钥/Laravel 的加密。

\n\n
\n\n

您可以通过设置禁用中间件中的测试(我的意思是调试)加密,或者从 kernel.php 中删除中间件(将其注释掉!,并在稍后的生产中取消注释)。App\\Http\\Middleware\\EncryptCookies$except = [\'fb\']

\n