【发布时间】:2017-11-12 01:06:30
【问题描述】:
我有一个登录处理文件,我试图在其中设置一个 cookie:
$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]]);
我正在使用 Firebase/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();
}
然后我测试是否在我的索引文件中设置了 cookie:
if (request()->cookies->has('access_token')) {
echo "Logged in";
} else echo "No cookie :(";
我的问题是我的测试返回“No cookie :(”。
任何帮助将不胜感激。
如果您愿意,可以在 GutHub 上 fork: jpradcliffe/user-authentication
【问题讨论】:
-
尝试使用变量 (
['cookies' => [$accessToken]]) 而不是传递 字符串'$accessToken'。由于$accessToken已经是Cookie对象,我认为您也可以使用setCookie($cookie)。 -
感谢@rickdenhaan 的建议,但不幸的是,在实施后我仍然收到相同的消息。
-
@rickdenhaan 更新:通过传递变量:
(['cookies' => [$accessToken]])而不是字符串'$accessToken',我确实逃脱了setCookie($cookie)。所以,这确实简化了我的代码。但是,我的 cookie 问题仍然存在。 -
好的,你能检查一下
request()->cookies->all()或者$_COOKIE里面有没有东西吗? -
@rickdenhaan 更新:感谢您对此的帮助。在告诉我代码在您的机器上运行后,我将问题隔离在我的 .env 文件中。我将 COOKIE_DOMAIN 设置为 localhost,却忘记了我以不同的名称创建了一个虚拟主机。我知道小错误,但如果没有你的帮助,我不会想到它,所以谢谢。
标签: php cookies jwt symfony-http-foundation