【问题标题】:Laravel Cookies weird behaviour - always sets the same valueLaravel Cookies 奇怪的行为 - 总是设置相同的值
【发布时间】:2018-10-18 16:55:52
【问题描述】:

我在 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('/');
}

这里是设置为fb的cookie: eyJpdiI6IkFROTRzU2ZhTGQwXC9DOHZoR3lqVDZnPT0iLCJ2YWx1ZSI6ImpqWE8wSVpDRzBzT1p2WGxPdE5pYlE9PSIsIm1hYyI6IjA5NzYxODQ0MmFkZmE2NDQ1YmU5Zjg2Y2NmNjU1N2RhZmVmNjcxZjJmYjhmZmViMWEwZGU5NTE5ZDYxMWY2ZjAifQ==

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

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

【问题讨论】:

    标签: php laravel cookies laravel-5.6


    【解决方案1】:

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

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

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

    注意eyJ base64 解码为 {",这是 JSON 的开始

    您可以在此答案https://stackoverflow.com/a/49445587/1564365 中了解更多有关应用程序密钥/Laravel 加密的信息。


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

    【讨论】:

    • 感谢您的详细回答。这很有意义!非常感谢。
    猜你喜欢
    • 1970-01-01
    • 2012-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-06
    • 2018-05-27
    • 2011-05-12
    • 1970-01-01
    相关资源
    最近更新 更多