Laravel Cookies странное поведение - всегда устанавливает одно и то же значение - PullRequest
0 голосов
/ 08 мая 2018

У меня проблема с установкой файлов cookie в Laravel 5.6. В настоящее время я работаю над тем, чтобы войти в систему с помощью 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==

Я пробовал это, используя фактические значения, конечно, поэтому сейчас я вернулся к тестовому значению, чтобы увидеть, что происходит. Я пытался очистить все свои куки и кеш, а также пробовал в Chrome и Safari.

Почему он всегда устанавливает значение eyJ ... вместо значения, которое я ему говорю?

1 Ответ

0 голосов
/ 08 мая 2018

Laravel шифрует & base64 кодирует все куки по умолчанию, используя App\Http\Middleware\EncryptCookies, поэтому, когда вы base64 декодируете строку, вы получите

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

, то есть зашифрованные данные, на самом деле шифруется только jjXO0IZCG0sOZvXlOtNibQ==, остальное - просто метаданные, используемые для расшифровки с APP_KEY. Также значение jjXO0IZCG0sOZvXlOtNibQ== кодируется в base64, после декодирования вы получаете 5ІBKf:bm, то есть real зашифрованное значение.

Примечание : eyJ декодирование base64 равно {", что составляет начало JSON.

Подробнее о ключе приложения / шифровании Laravel вы можете прочитать в этом ответе https://stackoverflow.com/a/49445587/1564365.


Вы можете отключить шифрование для тестирования (я имею в виду отладку) в App\Http\Middleware\EncryptCookies промежуточном программном обеспечении, установив $except = ['fb'], или просто удалить промежуточное программное обеспечение из kernel.php (закомментировать !, и раскомментировать его позже для производства).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...