我正在使用this库,并且遇到了一个令人讨厌的场景,我认为这是由于Cookie或标头验证中的某种冲突引起的。
当我登录一个帐户时,一切正常。但是,当尝试登录另一个帐户时,它只是忽略提供的新数据并使用旧数据进行身份验证并连接到旧帐户。无论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
,该方法清除了标头中的令牌。但是它并没有真正做任何事情。因此,我尝试从jar
帮助程序中删除requester
初始化,这是唯一帮助我继续并登录另一个帐户的事情。 但它仅用于实验,不能作为解决方案,因为您确实需要库中其他部分的cookie。这仅是问题不在标题中而在Cookie中的证明。
您知道如何在每次调用之间“重置”服务器状态吗?
答案 0 :(得分:1)
“ 当尝试登录另一个帐户时,它只是忽略提供的新数据,并使用旧数据进行身份验证并连接到旧帐户。”
如评论中提到的OP,这不是'auto'
标头问题,而是cookie问题。
要实现注销界面,您可以手动清除cookie:
authorization