Как передать заголовки при выполнении res.redirect в express js

Я работаю над express js, и мне нужно перенаправить на страницу, для которой требуется аутентификация. Это мой код:

router.get('/ren', function(req, res) {
    var username = 'nik',
        password = 'abc123',
        auth = 'Basic ' + new Buffer(username + ':' + password).toString('base64');

    res.redirect('http://localhost:3000/api/oauth2/authorize');
})

Как я могу установить заголовки для этой команды перенаправления?

Ответы

Ответ 1

Не выражает форвардные заголовки автоматически, если вы переадресовываете 301 (перемещение на постоянной основе) или 302 (найдено)?

Если нет, вы можете установить заголовки:

res.set({
  'Authorization': auth
})

или же

res.header('Authorization', auth)

а затем вызовите

res.redirect('http://localhost:3000/api/oauth2/authorize');

Наконец, что-то вроде этого должно работать:

router.get('/ren', function(req, res) {
    var username = 'nik',
        password = 'abc123',
    auth = "Basic " + new Buffer(username + ":" + password).toString("base64");

    res.header('Authorization', auth);

    res.redirect('http://localhost:3000/api/oauth2/authorize');
});

Ответ 2

Поскольку люди спрашивают, не было ли каких-либо обходных путей относительно того, что заголовки не настроены должным образом после перенаправления, на самом деле есть два способа, с которыми вы можете работать:

Во-первых, используя параметр запроса в URL-адресе перенаправления, который можно извлечь из клиентской стороны. Вы даже можете удалить его при загрузке с URL, используя API истории, как показано здесь.

history.pushState(null, '', location.href.split('?')[0])

Другое решение - установить cookie перед перенаправлением и получить его в клиенте. Лично я предпочитаю, что в том смысле, что он не загрязняет мой URL-адрес каким-либо образом, мне просто нужно удалить этот файл cookie при загрузке с помощью простого помощника:

export const removeCookie = name => {
  document.cookie = '${name}=; Max-Age=0'
}

Ответ 3

Почему вы не можете попробовать библиотеку Axios

    npm install axios

а затем

    return new Promise((resolve, reject) => {

        axios({
            "headers" : {
                "content-type" : "application/vnd.api+json"
            },
            "method" : method,
            "url" : url,
            "data" : data
        }).then((ax_res) => {
            var obj = {
                "status" : ax_res.status,
                "data" : ax_res.data
            }
            resolve(obj)
            return(obj)
        }).catch((ax_res) => {
            var obj = {
                "status" : ax_res.response.status,
                "data" : ax_res.response.data
            }
            resolve(obj)
            return(obj)
        })

    })

Ответ 4

Я сам не пробовал это решение, но думаю, что оно того стоит.

res.location(REDIRECT_URL)
res.set(HEADERS)

res.stats(302).end()

Надеюсь, это поможет, Авель