JWT Cookie没有正确存储 - Laravel

时间:2016-01-23 12:02:30

标签: php laravel cookies jwt

我正在使用 Laravel 5.1 ,我试图实现基本的JWT-Auth逻辑。

虽然我正在创建jwt_token权限(我将其记录到laravel.log,但当我尝试创建令牌时,令牌中有三个不同的部分按预期划分了点)如果Cookie值为jwt_token,则会创建一个完全不同的Cookie,不会按点划分,而是比原始jwt_token大得多。

我认为代码非常简单:

$jwt_token = $this->findOrCreateUser($user);
Log::error('My jwt_token is '. $jwt_token); //from the log here i see the right jwt_token

//i disable the http-only flag because i want to read it with js

return redirect('/index.html')->withCookie(Cookie::make('jwt_token',$jwt_token,1000,null,null,false,false));

如果有人能给我一些关于可能出错的指示,我会很高兴的!

由于

1 个答案:

答案 0 :(得分:2)

Laravel 5.1默认提供一个名为EncryptCookies的中间件,该中间件在HTTP内核的全局$middleware数组中注册。因此,cookie在发送到浏览器时会自动加密,这就是您的cookie值不是JWT令牌的纯文本表示的原因。

您可以通过两种方式轻松解决这个问题:

1。将Cookie名称添加到$except中的App\Http\Middleware\EncryptCookies数组:

protected $except = [
    'jwt_token'
];

2. 评论/删除EncryptCookies课程中的App\Http\Kernel中间件(虽然除非您特别希望所有Cookie都未加密,否则我不建议这样做):

protected $middleware = [
    \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
    // \App\Http\Middleware\EncryptCookies::class,
    \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
    \Illuminate\Session\Middleware\StartSession::class,
    \Illuminate\View\Middleware\ShareErrorsFromSession::class,
    \App\Http\Middleware\VerifyCsrfToken::class,
];