конфликт аутентификации между сеансами на сервере Express - PullRequest
0 голосов
/ 15 мая 2019

Я играю с этой библиотекой, и я испытываю раздражающий сценарий, который, по моему мнению, происходит из-за какого-то конфликта в аутентификации файлов 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, который очищает токен из заголовка.Однако это на самом деле ничего не делало.Поэтому я попытался удалить инициализацию jar из помощника requester, и это было единственное, что помогло мне перейти и войти в другую учетную запись. НО это было только для экспериментов и не может быть решением, так как вам нужны эти куки для других частей библиотеки.Это было только доказательство того, что проблема не в заголовках, а в файлах cookie.

Есть идеи, как "сбросить" состояние сервера между каждым вызовом?

1 Ответ

1 голос
/ 16 мая 2019

" при попытке войти в другую учетную запись просто игнорирует предоставленные новые данные и проходит аутентификацию со старыми данными и подключается к старой учетной записи. "

Как указано в комментарии в OP, это не проблема authorization заголовка, а проблема cookie.

Чтобы реализовать интерфейс выхода из системы, вы можете вручную очистить куки:

OKCupid.prototype.logout = function(){
  request = request.defaults({jar: request.jar()}) // reset the cookie jar
  headers.clearOAuthToken(); // just in case
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...