我在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,然后设置为fb
:
eyJpdiI6IkFROTRzU2ZhTGQwXC9DOHZoR3lqVDZnPT0iLCJ2YWx1ZSI6ImpqWE8wSVpDRzBzT1p2WGxPdE5pYlE9PSIsIm1hYyI6IjA5NzYxODQ0MmFkZmE2NDQ1YmU5Zjg2Y2NmNjU1N2RhZmVmNjcxZjJmYjhmZmViMWEwZGU5NTE5ZDYxMWY2ZjAifQ==
我已经尝试过使用实际值,这就是为什么我现在只需要一个测试值来看看发生了什么。我已经尝试清除所有Cookie和缓存,并在Chrome和Safari中进行尝试。
为什么总是设置一个eyJ ...值而不是我告诉它的值?
答案 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中删除中间件(注释掉它! ,并在以后取消注释以进行生产)。