Node.js - схема Joi: проверьте, не работают ли req.value и ip

У меня есть эта схема joi для проверки электронной почты и пароля, которые были отправлены через тело как json. Кроме того, теперь я хочу проверить IP-адрес. Я попробовал, как показано ниже, но получил следующее:

{
    "isJoi": true,
    "name": "ValidationError",
    "details": [
        {
            "message": "\"ip\" is required",
            "path": [
                "ip"
            ],
            "type": "any.required",
            "context": {
                "key": "ip",
                "label": "ip"
            }
        }
    ],
    "_object": {
        "email": "[email protected]",
        "password": "kyuser2923?"
    }
}

Вот моя схема joi в routehelpers.js

const Joi = require('joi');

module.exports = {
    validateSignup: (schema) => {
        return (req, res, next) => {
            const result = Joi.validate(req.body, schema);
            if (result.error) {
                return res.status(400).json(result.error);
            }

            if (!req.value) { req.value = {}; }
            req.value['body']= result.value;
            next();
        }
    },
    schemas: {
        signupSchema: Joi.object().keys({
            email: Joi.string().email().required(),
            password: Joi.string().required(),
            ip: Joi.string().ip({
              version: [
                'ipv4',
                'ipv6'
              ],
              cidr: 'required'
            }).required()
        })
    }
}

Когда я вставляю в свой контроллер:

const curIP = req.ip;
console.log('IP: '+curIP);

Я получаю ip в консоли:

Server running at http://127.0.0.1:4002/
IP: 127.0.0.1

Но как я могу дополнительно проверить IP-адрес сервера, запрашивающего регистрацию?

Я полагаю, это потому, что он проверяет все в req.value.body. Но как мне изменить validateSignup: (schema), чтобы также проверить IP-адрес, запрашивающий регистрацию?


person Philipp M    schedule 07.08.2018    source источник


Ответы (1)


Похоже, вы пытаетесь сопоставить свойство ip в body, когда это свойство объекта req.

Пытаться:

const result = Joi.validate(Object.assign(req.body, { ip: req.ip }), schema);

Хотя я думаю, что лучше было бы использовать такую ​​библиотеку, как proxy-addr. Это позволит извлечь правильный IP-адрес клиента, даже если ваш сервер работает через обратный прокси-сервер.

person m1ch4ls    schedule 07.08.2018
comment
Пожалуйста, я использую аналогичный код, но мой почтовый запрос получает пустые параметры. - person Bukunmi; 06.01.2019