2016-01-23 58 views
3

我正在使用Laravel 5.1我試圖實現一個基本的JWT-Auth邏輯。JWT Cookie不存儲正確 - Laravel

,而我創造jwt_token權(我把它記錄到laravel.log,令牌有它的預期點分成三個不同的部分),當我嘗試創建一個jwt_token值一個cookie,將創建一個完全不同的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)); 

我會很高興,如果有人可以給我什麼可能是錯誤的一些指點!

感謝

回答

2

Laravel 5.1船舶默認與命名是全球$middleware陣列的HTTP內核的註冊EncryptCookies中間件。因此,cookie在發送到瀏覽器時會自動加密,這就是您的cookie值不是JWT令牌的明文表示的原因。

您可以輕鬆地解決這個問題有兩種方法:

App\Http\Middleware\EncryptCookies添加cookie的名稱爲$except陣列:

protected $except = [ 
    'jwt_token' 
]; 

2.評論/刪除EncryptCookies中間件在App\Http\Kernel班(雖然我不建議這樣做,除非你特別希望所有的cookies都是未加密的):

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, 
]; 
+0

謝謝!很好的答案。 我應該仔細閱讀這裏的文檔https://laravel.com/docs/5.0/requests#cookies,你是對的! –

+0

非常歡迎。 – Bogdan