Je travaille sur express js et je dois rediriger vers une page nécessitant une authentification. Ceci est mon code:
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');
})
Comment définir des en-têtes pour cette commande de redirection?
N'exprime pas automatiquement les en-têtes si vous redirigez avec 301 (déplacé de façon permanente) ou 302 (trouvé)?
Sinon, voici comment vous pouvez définir des en-têtes:
res.set({
'Authorization': auth
})
ou
res.header('Authorization', auth)
puis appelez le
res.redirect('http://localhost:3000/api/oauth2/authorize');
Enfin, quelque chose comme ça devrait marcher:
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');
});
Des personnes ont demandé s'il existait une solution de contournement au fait que les en-têtes ne sont pas correctement définis après une redirection. Il existe en fait deux manières de travailler:
Tout d'abord, en utilisant un paramètre de requête dans l'URL de redirection, que vous pourriez extraire côté client. Vous pouvez même le supprimer au chargement de l'URL à l'aide de l'API d'historique, comme montré ici .
history.pushState(null, '', location.href.split('?')[0])
Une autre solution serait de définir un cookie avant la redirection et de l’obtenir dans le client. Personnellement, je préfère que dans le sens où cela ne pollue pas mon URL de quelque manière que ce soit, il me suffit de supprimer ce cookie en charge à l'aide d'un simple assistant:
export const removeCookie = name => {
document.cookie = `${name}=; Max-Age=0`
}