Как передать заголовки при выполнении 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()
Надеюсь, это поможет, Авель