【发布时间】:2019-03-08 03:53:43
【问题描述】:
我有一个项目使用像 token_ 和 refreshToken_ 这样的 cookie 对用户进行身份验证,还有一个中间件拦截我的路由并验证用户是否已登录。
在我的中间件中,当我需要更新 token_ 时,我有以下代码:
namespace App\Http\Middleware\VerifyAccessToken
$cookie_name = "token_";
$cookie_value = $obj->access_token;
$expires_in = $obj->expires_in;
$time = time() + $expires_in; // 3600 = 1 hora
$path = "/";
$domain = env('COOKIE_DOMAIN');
setcookie($cookie_name, $cookie_value, $time, $path, $domain, false, true);
$cookie_name = "refreshToken_";
$cookie_value = $obj->refresh_token;
setcookie($cookie_name, $cookie_value, $time + 3600, $path, $domain, false, true);
return $next($request);
它看起来很好,但问题是:
在中间件拦截我的路由并更新 cookie 后,请求会发送到他的控制器,但是在那里,我无法使用 $_COOKIE['token_'] 访问 cookie,并且出现错误,但如果我查看 chrome 的检查器,cookie 是在那里并重新加载页面 (F5) 我可以访问控制器中的 cookie
有没有一种方法可以让我访问控制器中的 cookie 而无需之前去视图?
【问题讨论】:
-
laravel 处理 cookie 的方式不同,获取 cookie 是 $value = $request->cookie('name');
-
另请参阅 Laravel 特定的答案/方法,特别是“Laravel 确实支持通过 queued() 在内存中检索 cookie”位:stackoverflow.com/questions/29836332/…