我正在使用Koa JS框架进行jwt身份验证。
所以基本上当用户登录时,我将jwt令牌(已签名)设置为用户的浏览器cookie,这似乎正常,如下所示(Chrome cookie设置):
(www.localhost.com而不是localhost是因为我编辑了我的主机文件,但这对设置/获取cookie没有影响)
但问题是,当我向本地Koa服务器发送POST请求时,jwt cookie未定义。我正在做的就是验证令牌:
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请求:
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”令牌已成功包含在请求标头中。
任何帮助将不胜感激。
//...
this.cookies.set("jwt", "SOME JWT GENERATED BY SERVER", {
httpOnly: true,
signed: true,
});
//...