Express服务器中的会话之间的身份验证冲突

时间:2019-05-15 10:54:52

标签: javascript node.js http express cookies

我正在使用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时,它可以正常工作。但是,当您尝试使用不同的usernamepassword再次执行此操作时,它只是简单地忽略了新数据并连接到旧数据。

作为调查的一部分,我查看了库的源代码,并找到了一种方法clearOAuthToken,该方法清除了标头中的令牌。但是它并没有真正做任何事情。因此,我尝试从jar帮助程序中删除requester初始化,这是唯一帮助我继续并登录另一个帐户的事情。 它仅用于实验,不能作为解决方案,因为您确实需要库中其他部分的cookie。这仅是问题不在标题中而在Cookie中的证明。

您知道如何在每次调用之间“重置”服务器状态吗?

1 个答案:

答案 0 :(得分:1)

当尝试登录另一个帐户时,它只是忽略提供的新数据,并使用旧数据进行身份验证并连接到旧帐户。

如评论中提到的OP,这不是'auto'标头问题,而是cookie问题。

要实现注销界面,您可以手动清除cookie:

authorization