Как получить клиентский IP на сервере dart shelf-rpc

У меня есть приложение веб-службы dart, написанное с использованием Shelf и Rpc apis.

Мне нужно проверить Ip клиента внутри моих методов API, но я не могу понять, как.

Метод контекста не содержит свойство HttpRequest.contentInfo.

Более того, объект запроса полки также не содержит его, поэтому функция промежуточного программного обеспечения будет бесполезна.

У кого-нибудь есть идея, как решить эту проблему?

2 ответа

Вы можете сделать это, используя промежуточную концепцию полки. Вы можете просмотреть пример промежуточного программного обеспечения регистратора здесь: https://www.crossdart.info/p/shelf/0.6.5+2/src/handlers/logger.dart.html. Пример использования регистратора можно найти здесь: https://github.com/dart-lang/shelf

В промежуточном программном обеспечении вы можете найти IP-адрес в объекте запроса (который расширяет сообщение). Сообщение дает вам доступ к необработанному заголовку http, который содержит IP-адрес. Оттуда вы можете решить, как вы хотите обработать неверный IP-адрес (выдать ошибку, вернуть запрос с ошибкой и т. Д.).

Вот как я получаю IP-адрес клиента:

      FutureOr<Response> handleWs(Request request) {
    final clientAddress = (request.context['shelf.io.connection_info'] as 
    HttpConnectionInfo?)?.remoteAddress.address;
}

запрос является параметром, когда вы обрабатываетеshelf_router.Router(), так:

      final routerHandler = shelf_router.Router()
  ..get('/message', (request) => handleWs(request))
Другие вопросы по тегам