Laravel Cookies奇怪的行为 - 始终设置相同的值

时间:2018-05-08 16:53:37

标签: php laravel cookies 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('/');
}

这是cookie,然后设置为fbeyJpdiI6IkFROTRzU2ZhTGQwXC9DOHZoR3lqVDZnPT0iLCJ2YWx1ZSI6ImpqWE8wSVpDRzBzT1p2WGxPdE5pYlE9PSIsIm1hYyI6IjA5NzYxODQ0MmFkZmE2NDQ1YmU5Zjg2Y2NmNjU1N2RhZmVmNjcxZjJmYjhmZmViMWEwZGU5NTE5ZDYxMWY2ZjAifQ==

我已经尝试过使用实际值,这就是为什么我现在只需要一个测试值来看看发生了什么。我已经尝试清除所有Cookie和缓存,并在Chrome和Safari中进行尝试。

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

1 个答案:

答案 0 :(得分:2)

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

{"iv":"AQ94sSfaLd0\/C8vhGyjT6g==","value":"jjXO0IZCG0sOZvXlOtNibQ==","mac":"097618442adfa6445be9f86ccf6557dafef671f2fb8ffeb1a0de9519d611f6f0"} 

加密数据,实际上只加密jjXO0IZCG0sOZvXlOtNibQ==,其余只是用于APP_KEY解密的元数据。 值jjXO0IZCG0sOZvXlOtNibQ==也是base64编码的,解码后你得到5ІBKf:bm,这是真正的加密值。

  

注意eyJ base64已解码为{",它是开头的。

您可以在此答案https://stackoverflow.com/a/49445587/1564365中详细了解应用程序密钥/ Laravel的加密。

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