Как правильно добавить заголовки в моем пост-запросе ax ios, пост-маршрут работает в почтальоне, но не при использовании axios - PullRequest
0 голосов
/ 19 февраля 2020

Я пытаюсь использовать JWT для защиты почтового маршрута в моем nodejs, express, приложении реагирования. Я протестировал его с помощью почтальона, добавив токен JWT в заголовки и отлично работает для добавления пользователя в базу данных. Но если я делаю запрос от реакции, используя ax ios, я получаю ответ 401 (Несанкционированный).

Это мой топор ios после запроса от внешнего интерфейса:

addClient = async e => {

let newUser = {
                businessname: businessname.toLowerCase(),
                firstName: firstName.toLowerCase(),
                lastName: lastName.toLowerCase(),
                email,
                username,
                password,
                phoneNumber,
                customerStatus: customerStatus.value,
                userType,
                Gooduntil
            };
            const accessString = localStorage.getItem("JWT");
            await Axios.post("/auth/signup", newUser, {
                headers: { Authorization: `JWT ${accessString}` }
            })
                .then(res => {
                    console.log(res);
                    return this.setState({
                        loadingAxiosReq: false
                    });
                })
                .catch(err => {
                    return console.log(err);
                });
}

Вот мой почтовый маршрут:

router.post("/signup", verifyToken, (req, res) => {
    console.log(req.headers);

    const {
        businessname,
        username,
        firstName,
        lastName,
        phoneNumber,
        email,
        password,
        customerStatus,
        userType,
        Gooduntil
    } = req.body;

    if (password.length < 8) {
        throw "Password must be at least 8 characters";
    } else {
        User.findOne({
            where: {
                email
            }
        }).then(user => {
            if (user) {
                return res.send("Email already exists!");
            } else {
                const encryptedPassword = bcrypt.hashSync(password, salt);

                let newUser = {
                    businessname,
                    username,
                    firstName,
                    lastName,
                    phoneNumber,
                    email,
                    password: encryptedPassword,
                    customerStatus,
                    userType,
                    Gooduntil
                };
                User.create(newUser)
                    .then(() => {
                        // newUser.isAdmin = true
                        delete newUser.password;
                        res.send(newUser);
                    })
                    .catch(function(err) {
                        console.log(err);
                        res.json(err);
                    });
            }
        });
    }
});

А это мое промежуточное ПО:

const jwt = require("jsonwebtoken");

module.exports = function(req, res, next) {
    const token = req.header("JWT");
    if (!token) return res.status(401).send("Access Denied!");

    try {
        const verified = jwt.verify(token, process.env.JWT_SECRET);
        req.user = verified;
        return next();
    } catch (err) {
        res.status(400).send("Invalid Token!");
    }
};

Итак, как мне правильно сделать запрос на топор ios? Заранее спасибо.

1 Ответ

1 голос
/ 19 февраля 2020

Из этой строки видно, что вы проверяете заголовок с именем JWT.

const token = req.header("JWT");

Но в топоре ios вы отправляете заголовок Authorization:

{ headers: { Authorization: `JWT ${accessString}` }

Вам необходимо отправить заголовок JWT. Также в качестве альтернативы, если вы хотите проверить заголовок Authorization, просто проверьте это:

const token = req.headers['authorization'];

Кроме того, просто отправьте <token>, если вы отправляете JWT <token>, то вам нужно будет разделить заголовок и отметьте только <token> часть.

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