JWT Cookie 未正确存储 - Laravel

Posted

技术标签:

【中文标题】JWT Cookie 未正确存储 - Laravel【英文标题】:JWT Cookie is not stored right - Laravel 【发布时间】:2016-04-30 00:38:27 【问题描述】:

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

虽然我正在创建 jwt_token 权限(我将其记录到 laravel.log,令牌有它按预期由点划分的三个不同部分),当我尝试使用 jwt_token 值创建一个 cookie 时,a创建了完全不同的 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】:

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

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

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

protected $except = [
    'jwt_token'
];

2. 注释/删除 App\Http\Kernel 类中的 EncryptCookies 中间件(尽管我不建议这样做,除非您特别希望所有 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,
];

【讨论】:

谢谢!很好的答案。我应该更仔细地阅读这里的文档laravel.com/docs/5.0/requests#cookies,你是对的!

以上是关于JWT Cookie 未正确存储 - Laravel的主要内容,如果未能解决你的问题,请参考以下文章

将 JWT 令牌存储到 HttpOnly cookie 中

将 JWT 存储在基于会话的 cookie Angular 6 中

Cookie 未使用 Fetch 存储

正确实现 JWT

如何使用 jwt 在 React 中正确存储当前用户信息

JWT:未直接访问服务器(localhost:3001/login)时未设置 Cookie(MERN)