2016-11-09 112 views
1

當用戶點擊某個端點時,我在服務器上調用以下功能,例如/api/login我在服務器上處理它,因爲我想將服務器端Cookie設置爲存儲身份驗證令牌。目前,它看起來像這樣:爲會話設置服務器端Cookie的正確方法

const createSession = (req, res, url) => { 
    const apiCall = request.post(url, (err, response, body) => { // eslint-disable-line 
    if (err) return res.sendStatus(500); 
    else if (response.statusCode !== 200) return res.status(response.statusCode).send(body); 
    const data = JSON.parse(body); 
    const options = { path: '/', hostOnly: true, httpOnly: true, maxAge: 3300000 }; // 55 min expiration 
    if (secrets.DOMAIN !== 'localhost') options.secure = true; 
    res.cookie('SESSION_TOKEN', data.token, options); 
    res.cookie('SESSION_EMAIL', data.email, options); 
    res.status(200).send(body); 
    }); 
    req.pipe(apiCall); 
}; 

和它的作品,但我覺得非常非常詳細,我不知道是否有更好的方式來處理這個問題,也許別的東西,除了請求庫?我試圖使用節點的http來解決這個問題,但永遠不會。

這裏是例如在我的Express服務器使用此功能:

app.post('/api/login', (req, res) => { 
    const url = `${secrets.API_HOST}/login`; 
    createSession(req, res, url); 
}); 

回答

1

我建議express-session,但是這部分取決於你的使用情況。

+1

我正在研究這個,但它似乎是更復雜的解決方案的問題,也許我失去了一些東西?如果你可以擴大,將不勝感激:)我試圖實現的本質是將用戶電子郵件和身份驗證令牌存儲在會話/會話cookie中,以便每個需要身份驗證的api調用都將在頭中使用這些令牌。通過像我現在這樣做(cookies),我可以從那裏獲取這些數據。 – Ilja

+0

嗯,它確實是一個更復雜的解決方案,但事實是,它使用cookies來存儲會話id在後臺..是的,你可以保存數據在會話中,如'req.session。<你的變量名稱> = ',基本上什麼都沒有,並且它堅持該用戶的所有請求。正如我所說,它在內部使用cookie將會話映射到對象,檢查非活動會話並刪除屬性以允許GC收集它們。 – Aurieh

相關問題