Cookie在Koa / Express请求中是“未定义的”

时间:2016-04-12 04:07:32

标签: ajax node.js express cookies koa

我正在使用Koa JS框架进行jwt身份验证。

所以基本上当用户登录时,我将jwt令牌(已签名)设置为用户的浏览器cookie,这似乎正常,如下所示(Chrome cookie设置):


enter image description here

(www.localhost.com而不是localhost是因为我编辑了我的主机文件,但这对设置/获取cookie没有影响)

但问题是,当我向本地Koa服务器发送POST请求时,jwt cookie未定义。我正在做的就是验证令牌:

routes.js

const Router = require("koa-router");

const router = new Router();
router.post(`api/authenticate`, function* () {
    const jwt = this.cookies.get("jwt", { signed: true });   //jwt is undefined!!
    if (!jwt)
        this.throw("Invalid or expired token!");

    this.status = 200;
});
//...
app.use(router.routes());
app.use(router.allowedMethods());

此处, this.cookies.get(“jwt”)返回undefined。使用带有“withCredentials:true”标头和有效CSRF令牌的AXIOS库发送POST请求:


authenticate.js

axios.post("api/authenticate", {}, {
    headers: {
        "X-Requested-With": "XMLHttpRequest",
        "X-CSRF-Token": "A VALID CSRF TOKEN GENERATED BY SERVER",
        "Content-Type": "application/json",
    },
    withCredentials: true,
});

任何人都可以帮我找出 this.cookies.get 无法从简单的POST请求中获取Cookie的原因吗?我只是发布到我的localhost,所以我认为这不是一个CORS问题。

更奇怪的是,当我检查我的chrome开发人员工具时,“jwt”和“jwt.sig”令牌已成功包含在请求标头中。



enter image description here



任何帮助将不胜感激。



更新:设置cookie

//...
this.cookies.set("jwt", "SOME JWT GENERATED BY SERVER", {
                    httpOnly: true,
                    signed: true,
                });
//...

0 个答案:

没有答案