Express req.ip переключается между сообщением адреса моей локальной машины как :: ffff: 127.0.0.1 и :: 1 на случайной основе - PullRequest
1 голос
/ 10 января 2020

Так что в основном название говорит само за себя.

В течение последних нескольких часов я работал над функцией промежуточного программного обеспечения, которая использует куки для аутентификации, что-то очень простое:

const authRoute = async (req, res, next) => {
    console.log(req.ip);
    // some other logic here
    return next();
};

app.use('/admin/', authRoute, adminRouter);

Дело в том, что я не модифицировал никакой другой код, такой как, например, app.set() или даже сам app.use(), я работал исключительно над этой функцией промежуточного программного обеспечения. Я также сохраняю req.ip в своей базе данных для аутентификации.

Ну, к моему удивлению, тот же самый объект req.ip неожиданно начал приводить к:

::1

только после перезапуска приложения / сервера, по-видимому, без причины. Прямо перед этим мне сообщали:

::ffff:127.0.0.1

Я могу это проверить, потому что я консольно веду журнал и сохраняю значение в базе данных.

enter image description here

Для записи, req.connection.remoteAddress - это то же самое, и у меня нет специальных настроек, таких как trust proxy или что-то подобное, я не достиг этой стадии разработки пока.

Итак, я действительно почесал голову сейчас о том, что может быть причиной этого, поэтому любая помощь или вклад приветствуются. При необходимости я также могу предоставить дополнительную информацию, такую ​​как мой bin/www config.

Я нахожусь на машине с Win7.

Ответы [ 2 ]

1 голос
/ 10 января 2020

Проверьте строку на наличие начального значения ::ffff: и удалите ее, затем оставшийся IPv4, в противном случае (без начального значения ::ffff:) это IPv6.

Причина, по которой вы получаете разные IP-адреса для localhost иногда запрос приходит как IPv4 (::ffff:127.0.0.1), а иногда как IPv6 (::1).

В любом случае вам нужно позаботиться об обеих версиях в рабочей среде.

1 голос
/ 10 января 2020

Вы можете попробовать использовать req.connection.remoteAddress, я использовал его много раз с успехом. Этот ответ кристально чистый https://superuser.com/questions/668004/why-is-my-localhost-not-127-0-0-1-but-1-and-what-notation-is-that

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...