【问题标题】:How to set a cookie on response in Laravel Lumen 8如何在 Laravel Lumen 8 中设置响应的 cookie
【发布时间】:2021-06-30 07:36:09
【问题描述】:

我目前正在使用 Laravel Lumen 8 构建一个 REST API。如果用户成功登录,我想设置一个 cookie。我看到在 Lumen 5.1 文档中有一个部分显示了如何发送带有响应的 cookie (https://lumen.laravel.com/docs/5.1/responses#attaching-cookies-to-responses)。但在版本 8 的文档中,这部分内容缺失。我还查看了 Laravel 8 文档 (https://laravel.com/docs/8.x/responses#attaching-cookies-to-responses) 并在我的 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 Illuminate\Support\Facades\Cookie;

$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 Symfony\Component\HttpFoundation\Cookie;
$router->get('/test', function () {
    return response(null)->withCookie(new Cookie('name', 'value'));
});

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

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

【问题讨论】:

  • 第一次尝试是否导入了这个类Illuminate\Http\Response
  • 是的,我添加了use Illuminate\Http\Response;
  • Yii2 更适合 WebDev 2021。

标签: php laravel cookies lumen


【解决方案1】:

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

引用自该线程:

我猜罪魁祸首是 Lumen 的设计不再适用 cookie 鉴于所有的博客和 OWASP 建议不要将 JWT 存储在本地存储中,而是存储在 httponly cookie 以防止 XSS 并相应地处理 CSRF。所以 jwt-auth 不包含 cookie 解析器 LumenServiceProvider 这是您在 app.php 中注册的 服务商:

$app->register(Tymon\JWTAuth\Providers\LumenServiceProvider::class);

所以当你添加

use Tymon\JWTAuth\Http\Parser\Cookies;
to the top of jwt-auth\src\Providers\LumenServiceProvider.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 身份验证作为 好吧。

【讨论】:

    【解决方案2】:

    我也遇到了同样的问题,这不是很漂亮,但它为我解决了这个问题。

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

    【讨论】:

      猜你喜欢
      • 2015-08-13
      • 2015-08-13
      • 2015-07-03
      • 1970-01-01
      • 2017-06-19
      • 1970-01-01
      • 2022-01-04
      • 2016-02-04
      • 1970-01-01
      相关资源
      最近更新 更多