【问题标题】:SetCookie header not stored未存储 SetCookie 标头
【发布时间】:2017-04-04 10:32:02
【问题描述】:

我目前正在使用 node/express.js 为 API 和 Vue.js 为前端制作一个 Web 应用程序。

对于身份验证,我设置了 JWT 并通过 cookie (HttpOnly) 发送值。 “SetCookie”在 Chrome/Firefox 调试器的响应请求中,但显然它没有存储在任何地方! 当我尝试发出需要 cookie 的请求时,请求标头不包含任何 cookie。我真的不明白为什么:/。 经过一番研究,我认为是因为我在localhost上工作,所以我将我的服务器移到了云端,并通过修改hosts文件为前面设置了一个假域,但仍然不起作用。

这里是响应请求的示例: Response header

在服务器上设置 cookie:

res.cookie('token', token, {
     path: '/',
     domain: '.shareinfo.io',
     httpOnly: true, 
     maxAge: 86400000 // 24h
});

如果有人有想法或解决方案,那就太好了!

谢谢你,问候,

阿尔维耶

【问题讨论】:

    标签: javascript node.js api express cookies


    【解决方案1】:

    终于,在我的电脑上敲了几下头并在论坛上研究后,我发现了问题。

    我忽略了客户端请求的凭据,认为这对身份验证并不重要,但这是一个大错误

    事实上,凭​​据包括 cookie,因此如果您在向服务器/API 发出请求时未将凭据设置为“true”,则所有返回的 cookie 都将被忽略。您必须在服务器和客户端上都授权凭据。

    所以最后的代码是将此选项变量添加到我的 POST 请求中:(使用 Vue.js

    //Request options (CORS)
        var options = {
            headers: {
            },
            credentials: true
        };
    
    //Make your HTTP request:
        this.$http.post(<url>, payload, options).then((response) => {
            //success
        }, (response) => {
            //error
        });
    

    【讨论】:

      【解决方案2】:

      我也有这个问题将近一周,并发现将凭据设置为 true 应该可以解决问题。如果您使用的是 Vue,请使用拦截器,这样您就不需要按请求调用它

      Vue.http.interceptors.push((request, next) => {
          request.credentials = true;
          next();
      });
      

      【讨论】:

        猜你喜欢
        • 2021-10-27
        • 2021-03-15
        • 2011-02-09
        • 1970-01-01
        • 2020-05-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-11-16
        相关资源
        最近更新 更多