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);
});
我正在研究這個,但它似乎是更復雜的解決方案的問題,也許我失去了一些東西?如果你可以擴大,將不勝感激:)我試圖實現的本質是將用戶電子郵件和身份驗證令牌存儲在會話/會話cookie中,以便每個需要身份驗證的api調用都將在頭中使用這些令牌。通過像我現在這樣做(cookies),我可以從那裏獲取這些數據。 – Ilja
嗯,它確實是一個更復雜的解決方案,但事實是,它使用cookies來存儲會話id在後臺..是的,你可以保存數據在會話中,如'req.session。<你的變量名稱> =',基本上什麼都沒有,並且它堅持該用戶的所有請求。正如我所說,它在內部使用cookie將會話映射到對象,檢查非活動會話並刪除屬性以允許GC收集它們。 –
Aurieh