我正在使用 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));
如果有人能给我一些关于可能出错的指示,我会很高兴的!
由于
答案 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,
];