2016-10-12 8 views
5

Pracuję nad wyrażeniem js i muszę przekierować na stronę, która wymaga uwierzytelnienia. To jest mój kod:Jak przekazywać nagłówki podczas wykonywania res.redirect w 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'); 
}) 

Jak ustawić nagłówki dla tego polecenia przekierowania?

+1

jakie nagłówki chcesz ustawić? nawet jeśli ustawisz nagłówki, nie będą one dostępne dla '/ api/oauth2/authorize' url –

+0

Chcę ustawić nagłówek Authorization, {'Authorization': auth} – user3655266

+0

Nie można tego zrobić. Sprawdź [ten wątek] (http://stackoverflow.com/questions/32235438/set-express-response-headers-before-redirect). – solosodium

Odpowiedz

4

Nie wyraża automatycznie nagłówków do przodu, jeśli przekierowujesz 301 (Przenoszony na stałe) lub 302 (Znaleziono)?

Jeśli nie, to w jaki sposób można ustawić nagłówki:

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

lub

res.header('Authorization', auth) 

a następnie wywołać

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

Wreszcie coś takiego powinno działać:

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'); 
}); 
+0

Dzięki, działa i dostałem odpowiedź z kodem stanu 302 i treścią: "Znaleziono. przekierowanie do http: // localhost: 3000/api/oauth2/authorize ', ale przeglądarka pozostaje na tej samej stronie, czy możesz pomóc – user3655266

+0

@ user3655266 Potrzebuję więcej informacji. Co rejestrowałeś w stosunku do trasy/api/oauth2/authorize? Czego oczekujesz? Renderować coś lub zwracać jakieś dane json lub coś innego? –

+0

W/api/oauth2/authorize, renderowałem stronę przy użyciu mechanizmu wyświetlania ejs ... res.render ("dialog") – user3655266

0

Jak ludzie mają zapytał, czy nie było żadnych obejście o tym nagłówki nie są prawidłowo ustawione po przekierowaniu, nie ma właściwie dwa sposoby, można pracować z:

Po pierwsze, za pomocą parametru zapytania w adresie URL przekierowania, które można wyodrębnić po stronie klienta. Możesz nawet usunąć go z adresu URL za pomocą interfejsu API historii, na przykład here.

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

Innym rozwiązaniem byłoby ustawienie pliku cookie przed przekierowaniem i umieszczenie go w kliencie. Osobiście wolę, aby w żaden sposób nie zanieczyszczał mojego adresu URL, wystarczy usunąć ten plik cookie przy użyciu prostego pomocnika:

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

@MilanVelebit Przepraszamy za ping, ale może być dla Ciebie interesujący :) –

Powiązane problemy