首頁 > web前端 > js教程 > 主體

Nodejs中session的簡單使用及透過session實現身份驗證的方法_node.js

WBOY
發布: 2016-05-16 15:16:15
原創
1437 人瀏覽過

session 不用多介紹,使一個http可以對應一個終端使用者。

session的本質是使用cookie來實現。

原理大概是:http 帶來服務端提前設定 cookie,服務端拿到標示使用者身分的cookie, 再去固定地點(資料庫,檔案)檢索出對應的使用者身分。把身分賦值給本次請求的request,在程式處理中就知曉了使用者的身分了。 (在PHP,ASP或其他服務端語言中都自動幫你實現了)

實作cookie

需要為每個使用者設定一個可以標示使用者身分的cookie。可以使用以下規則

註冊郵箱MD5值+密碼MD5值+隨機碼MD5值。 (僅舉例,這可能不是一個好的方案)

服務端程式碼片段:

res.setHeader("Set-Cookie", ["sid="+newUser.toCookie()+";path=/;domain="+config.domain+";expires="+new Date("2030") ]); 
登入後複製

cookie

sid=275fccab7935736ff68c95c3ddbfaaee|275fccab7935736ff68c95c3ddbfaaee|275fccab7935736ff68c95c3ddbfaaee 
登入後複製

使用 cookie 取得使用者身份,設定session

把所有非靜態資源的請求都導向到這裡處理。取得cookie,把cookie拆分並在資料庫中尋找符合條件的使用者。最後使用 next 跳到下一個請求邏輯。

下一個請求邏輯就可是直接使用 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實現驗證

nodejs express session 驗證

1)引入模組

var session = require('express-session');
var cookieParser = require('cookie-parser');
登入後複製

2)應用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)請求時,應用身份驗證

app.use(function(req,res,next){
if (!req.session.user) {
if(req.url=="/login"){
next();//如果请求的地址是登录则通过,进行下一个请求
}
else
{
res.redirect('/login');
}
} else if (req.session.user) {
next();
}
});
登入後複製

4)登陸設計

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');
});
登入後複製
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新問題
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板