【发布时间】:2019-05-16 17:39:11
【问题描述】:
我正在玩this 库,我遇到了一个烦人的场景,我认为这是由于 cookie 或标头身份验证中的某种冲突造成的。
当我登录一个帐户时,一切正常。但是当尝试登录另一个帐户时,它只是忽略提供的新数据并使用 old 数据进行身份验证并连接到 old 帐户。不管email 还是password 是否存在。 (也尝试使用假数据)。
该库没有正确的 logout 方法,这是有意义的,你真的不需要一个,因为当你在你的机器上简单地使用 node 运行它而不涉及任何服务器并且没有 cookie 或任何类型的数据在记忆中,一切都很好。我可以登录任意数量的帐户。
问题在于在 Express 服务器上运行它时。
代码:
// api.js
const OKCupid = require("./okc_lib");
const Promise = require("bluebird");
const okc = Promise.promisifyAll(new OKCupid());
async function start(req, res, next) {
const {
body: {
username,
password
}
} = req;
try {
await okc.loginAsync(username, password);
okc.search(
searchOpt,
(err, resp, body) => {
if (err) return console.log({ err });
const results = body.data;
// do dsomething with results
return res.status(200).json({ message: "OK" });
});
}
);
} catch (error) {
res.status(400).json({ message: "Something went wrong", error });
}
}
module.exports = { start };
// routes.js
const express = require("express");
const router = express.Router();
const { start, login } = require("../actions/okc");
router.post("/login", login);
router.post("/start", start);
module.exports = router;
因此,当首先尝试发布到 url/login 时,它工作正常。但是,当您尝试使用不同的 username 和 password 再次执行此操作时,它只是通过并忽略新数据并连接到旧数据。
作为调查的一部分,我查看了库的源代码,发现了一个方法clearOAuthToken,它可以从标头中清除令牌。然而它并没有真正做任何事情。所以我试图从requester 助手中删除jar 初始化,这是唯一帮助我继续前进并登录到另一个帐户的东西。 但是它只是用于试验,不能作为解决方案,因为您确实需要这些 cookie 用于库的其他部分。这只是证明问题不在标题中,而是在 cookie 中。
知道如何在每次调用之间“重置”服务器状态吗?
【问题讨论】:
标签: javascript node.js http express cookies