2016-10-12 64 views
5

我正在使用express js,並且需要重定向到需要認證的頁面。這是我的代碼:如何在express js中使用res.redirect時傳遞標頭

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

要設置哪些標頭?即使你設置了頭文件,他們將不可用於'/ api/oauth2/authorize' url –

+0

我想設置授權頭文件{'Authorization':auth} – user3655266

+0

這似乎是不可能的。檢查[這個線程](http://stackoverflow.com/questions/32235438/set-express-response-headers-before-redirect)。 – solosodium

回答

4

如果您使用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'); 
}); 
+0

謝謝,它的工作原理,我得到了狀態碼302和身體的答覆:'找到。重定向到http:// localhost:3000/api/oauth2/authorize',但瀏覽器保持在同一頁面上,請你幫忙 – user3655266

+0

@ user3655266我需要更多信息。你在/ api/oauth2/authorize路線註冊了什麼?你期望發生什麼?渲染一些東西或返回一些JSON數據或其他東西? –

+0

在/ api/oauth2/authorize中,我使用ejs視圖引擎渲染了一個頁面... res.render('dialog') – user3655266

0

由於人們詢問是否有關於事實的任何解決辦法標題不正確重定向設置後,實際上是你可以用兩個方式:

首先,通過在重定向URL中使用的查詢參數,您可以從中提取客戶端。您甚至可以使用歷史API從網址加載時將其刪除,如顯示here

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

另一種解決方案是在重定向之前設置一個cookie,並在客戶端獲取它。我個人更喜歡在某種意義上它不會以任何方式污染我的網址,我只需要使用簡單的幫助程序加載該Cookie即可:

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

@MilanVelebit對不起,但可能會讓你感興趣:) –

相關問題