Nodejs中session的簡單使用及通過session實(shí)現(xiàn)身份驗(yàn)證的方法
session 不用多介紹,使一個http可以對應(yīng)一個終端用戶。
session的本質(zhì)使用cookie來實(shí)現(xiàn)。
原理大概是:http 帶來服務(wù)端提前設(shè)置 cookie,服務(wù)端拿到標(biāo)示用戶身份的cookie, 再去固定地點(diǎn)(數(shù)據(jù)庫,文件)檢索出對應(yīng)的用戶身份。把身份賦值給本次請求的request,在程序處理中就知曉了用戶的身份了。(在PHP,ASP或者其他服務(wù)端語言中都自動幫你實(shí)現(xiàn)了)
實(shí)現(xiàn)cookie
需要為每一個用戶設(shè)置一個可以標(biāo)示用戶身份的cookie。可以使用如下規(guī)則
注冊郵箱MD5值+密碼MD5值+隨機(jī)碼MD5值。(僅僅舉例,這可能并不是一個好的方案)
服務(wù)端代碼片段:
res.setHeader("Set-Cookie", ["sid="+newUser.toCookie()+";path=/;domain="+config.domain+";expires="+new Date("2030") ]);
cookie
sid=275fccab7935736ff68c95c3ddbfaaee|275fccab7935736ff68c95c3ddbfaaee|275fccab7935736ff68c95c3ddbfaaee
使用 cookie 獲取用戶身份,設(shè)置session
把所有非靜態(tài)資源的請求都定向到這里處理。獲取cookie,把cookie拆分并在數(shù)據(jù)庫查找符合條件的用戶。最后使用 next 跳轉(zhuǎn)到下一個請求邏輯。
下一個請求邏輯就可是直接使用 req.session.user 來獲取 user 對象了。
session:function(req, res, next){ req.session = {}; if( req.cookies && req.cookies.sid ){ var a = req.cookies.sid.split("|"); var hexMail = a[0]; var hexPwd = a[1]; var hexRandom = a[2]; UserModel.hexFind(hexMail, hexPwd, hexRandom, function( status ){ //console.log("hexFind", status ); if(status.code == "0"){ //req.cookiesSelecter = cookiesSelecter; req.session.user = status.result; } next(); }); }else{ next(); } }
下面給大家說說nodejs通過session實(shí)現(xiàn)身份驗(yàn)證
nodejs express session 身份驗(yàn)證
1)引入模塊
var session = require('express-session'); var cookieParser = require('cookie-parser');
2)應(yīng)用cookie及session
app.use(cookieParser()); app.use(session({ resave: true, // don't save session if unmodified saveUninitialized: false, // don't create session until something stored secret: 'love' }));
3)請求時,應(yīng)用身份驗(yàn)證
app.use(function(req,res,next){ if (!req.session.user) { if(req.url=="/login"){ next();//如果請求的地址是登錄則通過,進(jìn)行下一個請求 } else { res.redirect('/login'); } } else if (req.session.user) { next(); } });
4)登陸設(shè)計
app.get('/login',function(req,res){ res.render("login"); }); app.post('/login',function(req,res){ if(req.body.username=="love" && req.body.password=="love"){ var user = {'username':'love'}; req.session.user = user; res.redirect('/admin/app/list'); } else { res.redirect('/login'); } }); app.get('/logout',function(req,res){ req.session.user = null; res.redirect('/login'); });
相關(guān)文章
package.json與package-lock.json創(chuàng)建及使用詳解
這篇文章主要為大家介紹了package.json與package-lock.json創(chuàng)建及使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-07-07node.js爬蟲框架node-crawler初體驗(yàn)
這篇文章主要介紹了node.js爬蟲框架node-crawler的相關(guān)資料,幫助大家利用node.js進(jìn)行爬蟲,感興趣的朋友可以了解下2020-10-10node.js實(shí)現(xiàn)token身份驗(yàn)證的示例代碼
本文主要介紹了node.js實(shí)現(xiàn)token身份驗(yàn)證的示例代碼,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-02-02Node.js net模塊功能及事件監(jiān)聽用法分析
這篇文章主要介紹了Node.js net模塊功能及事件監(jiān)聽用法,結(jié)合實(shí)例形式分析了net模塊功能及事件監(jiān)聽相關(guān)操作技巧,需要的朋友可以參考下2019-01-01node.js支持多用戶web終端實(shí)現(xiàn)及安全方案
這篇文章主要介紹了node.js支持多用戶web終端實(shí)現(xiàn)方案以及web終端安全性保證的解決方法,一起學(xué)習(xí)參考下。2017-11-11nodejs中express入門和基礎(chǔ)知識點(diǎn)學(xué)習(xí)
這篇文章給大家分享了關(guān)于學(xué)習(xí)nodejs中express入門和基礎(chǔ)知識點(diǎn)內(nèi)容,有興趣的朋友們參考下。2018-09-09Node.js事件循環(huán)(Event Loop)和線程池詳解
這篇文章主要介紹了Node.js事件循環(huán)(Event Loop)和線程池詳解,這篇文章比較淺顯地探討了有關(guān)事件循環(huán)的內(nèi)部運(yùn)作機(jī)制和技術(shù)細(xì)節(jié),都是經(jīng)過深思熟慮的,需要的朋友可以參考下2015-01-01