Как установить заголовки при запросе страницы в nodejs? - PullRequest
0 голосов
/ 29 марта 2020

Я видел много уроков по аутентификации jwt, но каждый производитель видео использует Postman, чтобы показать, что происходит, и передает заголовок в разделе заголовков при запросе URL-адреса в Postman. Я пытался сделать это с JavaScript, но я не смог этого сделать.

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

Я хочу установить заголовки запросов для аутентификации формы "Bearer {token}" для каждого запроса после поколение токенов. Как это сделать с JS ??

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

Ответы [ 5 ]

1 голос
/ 29 марта 2020

Вы можете легко добавить заголовок к вашему http-запросу следующим образом:

, это было решено здесь Node.JS: Как отправить заголовки с данными формы, используя модуль запроса

0 голосов
/ 30 марта 2020

Если я правильно понимаю, вы хотите установить HTTP-заголовок на клиенте, чтобы передать токен аутентификации на сервер. Я бы порекомендовал вам использовать такую ​​библиотеку, как ** ax ios*.

Используя ax ios, как только вы получите ток, установите заголовок для каждого исходящего соединения со следующей строкой кода:

axios.defaults.headers.common['Authorization'] = "Bearer " + token;

Это установит заголовок http аутентификации на Форма вам нужна.

0 голосов
/ 29 марта 2020

В ванили nodejs:

const uri = "http://example.com";

const options = {
    headers: {
        "Authorization": "Bearer ...."
    }
}

// require http/https lib
let req = require("http").request(uri, options, (res) => {

    const chunks = [];

    res.on("data", function (chunk) {
        chunks.push(chunk);
    });


    res.once("end", () => {

        // concat body chunks
        let body = Buffer.concat(chunks);
        console.log(body.toString());

    });


});

req.on("error", (err) => {
    console.log(err);
});

req.end();

https://nodejs.org/dist/latest-v12.x/docs/api/http.html#http_http_request_options_callback

0 голосов
/ 29 марта 2020

Сначала установите jwt и express framework, используя npm, затем создайте файл промежуточного программного обеспечения, который проверит, установлен ли токек.

Middleware. js:

let jwt = require('jsonwebtoken');
const config = require('./config.js');

let checkToken = (req, res, next) => {
    let token = req.headers['authorization']; // Express headers are auto converted to lowercase

    if (token) {
        if (token.startsWith('Bearer ')) {  // Checks if it contains Bearer
            // Remove Bearer from string
            token = token.slice(7, token.length); //Separate Bearer and get token
        }

        jwt.verify(token, config.secret, (err, decoded) => {  //Inser the token and verify it.
            if (err) {
                return res.json({
                    status: false,
                    message: 'Token is not valid'
                });
            } else {
                req.decoded = decoded;
                next();
            }
        });
    } else {
        return res.json({
            status: false,
            message: 'Access denied! No token provided.'
        });
    }
};

Затем создайте файл конфигурации, который будет содержать секреты.

Конфиг js:

module.exports = {
    secret: 'worldisfullofdevelopers'
};

Наконец, создайте Маршрут токена, который создаст ваш токен, и после этого остальные вызовы будут аутентифицированы для этого токена.

Индекс. js:

const middleware = require('./middleware');
const jwt = require("jsonwebtoken");
const config = require('./config.js');

//Call token Route
app.use('/token', (req, res, next) => {

    //Generate Token
    let token = jwt.sign({ username: "test" },
        config.secret,
        {
            expiresIn: '1h' // expires in 1 hours
        }
    );

    //Send Token
    res.json({
        success: true,
        message: 'Authentication successful!',
        token: token
    });

});

//Add Authentication to all routes
app.use(middleware.checkToken);

//===> All the routes after middleware will be checked for token

app.use('/getUser', (req, res, next) => {; 
 console.log('do something')
});
0 голосов
/ 29 марта 2020

Примерно так:

$.ajax({
  url: url,
  beforeSend: function(xhr) {
    xhr.setRequestHeader("custom_header", "value");
  },
  success: function(data) {
  }
});
...