如何在Laravel Lumen 8中设置响应cookie



我目前正在用Laravel Lumen 8构建一个REST API。如果用户成功登录,我想设置一个cookie。我看到在Lumen 5.1文档中有一个部分展示了如何发送带有响应的cookie(https://lumen.laravel.com/docs/5.1/responses#attaching-Cookie响应(。但在版本8的文档中,缺少此部分。我还查看了Laravel 8文档(https://laravel.com/docs/8.x/responses#attaching-Cookie响应(,并在我的routes/web.php文件中尝试了以下操作:

尝试1

$router->get('/test', function () {
return response('Hello World')->cookie(
'name', 'value', 60
);
});

但后来我得到了以下错误:

参数1传递到Symfony\Component\HttpFoundation\ResponseHeaderBag::setCookie((必须是Symfony\Component\HttpFoundation\Cookie的实例,字符串给定

尝试2次

use IlluminateSupportFacadesCookie;
$router->get('/test', function () {
Cookie::queue('name', 'value', 60);
return response('Hello World');
});

错误消息:目标类〔cookie〕不存在。

尝试3次

$router->get('/test', function () {
$cookie = cookie('name', 'value', 60);
return response('Hello World')->cookie($cookie);
});

错误消息:调用未定义的函数cookie((

尝试4

use SymfonyComponentHttpFoundationCookie;
$router->get('/test', function () {
return response(null)->withCookie(new Cookie('name', 'value'));
});

这个解决方案是有效的,但如果我像new Cookie('name', 'value', 60)这样设置第三个参数,我不会收到错误消息,但cookie不再设置。我也有点怀疑,因为我从未在任何官方文档中看到过这一点,只在这个堆栈溢出问题中看到过:在流明5.6中设置cookie响应。

这些并不是我尝试过的唯一方法,但到目前为止没有任何效果。设置cookie应该很容易,但我就是做不到。我对Laravel/Lumen很陌生,这与新版本8有关吗?或者我做错了什么?

我也遇到过同样的问题,这不太好,但它帮我解决了。

use SymfonyComponentHttpFoundationCookie;
use SymfonyComponentHttpFoundationResponse;
...
$response = new Response();
$response->headers->setCookie(Cookie::create('foo', 'bar'));
$response->send(); // <- this guy

如果您使用Sean Tymon的jwt auth库进行JSON Web令牌身份验证,此线程可能会帮助您:https://github.com/tymondesigns/jwt-auth/issues/1594#issuecomment-395575980

引用自线程:

我想罪魁祸首的根源是Lumen的设计不再Cookie,我发现在所有博客和OWASP建议不要将JWT存储在本地存储中,而是存储在httponly cookie以防止XSS并相应地处理CSRF。所以jwt-auth不包括带有LumenServiceProvider是您在app.php中注册的服务提供商:

$app->register(TymonJWTAuthProvidersLumenServiceProvider::class);

所以当你添加时

use TymonJWTAuthHttpParserCookies;
to the top of jwt-authsrcProvidersLumenServiceProvider.php

并添加

new Cookies($this->config('decrypt_cookies'))

在文件的最后插入数组

$this->app['tymon.jwt.parser']->setChain([<br>
new AuthHeaders,
new QueryString,
new InputSource,
new LumenRouteParams,
new Cookies($this->config('decrypt_cookies')),
]);

那么你应该能够在Lumen中使用cookie身份验证好

最新更新