2017-06-09 21 views
0

我有在我試圖設置一個cookie登錄處理文件:如何設置和讀取Cookie的W/HTTP的基礎上,智威湯遜,與.ENV

$expTime = time() + 3600; 
$key = getenv("SECRET_KEY"); 
$token = array(
    "iss" => request()->getBaseUrl(), 
    "sub" => [$user['id']], 
    "exp" => $expTime,   
    "iat" => time(), 
    "nbf" => time(), 
    "is_admin" => $user['role_id'] == 1 
); 
$jwt = JWT::encode($token, $key); 

$accessToken = new Cookie('access_token', $jwt, $expTime, '/', getenv("COOKIE_DOMAIN")); 

redirect('/', ['cookies' => [$accessToken]]); 

我使用火力地堡/ JWT將JWT作爲cookie值。 SECRET_KEY和COOKIE_DOMAIN從我的.ENV文件中提取。

然後我打電話給我的redirect()

function redirect($path, $extra = []) { 
$response = new Response(
    null, 
    Response::HTTP_FOUND, 
    array('location' => $path) 
    ); 
    if (key_exists('cookies', $extra)) { 
     foreach ($extra['cookies'] as $cookie) { 
      $response->headers->setCookie($cookie); 
     } 
    } 
    $response->send(); 
} 

然後我測試是否餅乾一直在我的索引文件中設置:

if (request()->cookies->has('access_token')) { 
    echo "Logged in"; 
} else echo "No cookie :("; 

我的問題是,我的測試返回「沒有餅乾:(」。

任何幫助,將不勝感激。

如果你喜歡,你可以在GutHub上分享它: jpradcliffe/user-authentication

+0

嘗試使用變量('['cookies'=> [$ accessToken]'')而不是傳遞***字符串***''$ accessToken''。由於'$ accessToken'已經是一個'Cookie'對象,我認爲你可以用'setCookie($ cookie)'離開。 – rickdenhaan

+0

謝謝你的建議@ rickdenhaan,但不幸的是,在實施它之後,我仍然得到相同的信息。 – jpradcliffe

+0

@rickdenhaan更新:通過傳遞變量:'(['cookies'=> [$ accessToken]])''而不是字符串''$ accessToken''我確實用'setCookie($ cookie)'離開了。所以,這確實簡化了我的代碼。但是,我的cookie問題依然存在。 – jpradcliffe

回答

0

我終於用一些幫助解決了這個問題(見下面的註釋)。上面的代碼是正確的。問題出在我的.env文件中。