标签:
之前不知道了,现在整理一下。
三个阶段:
1、cookie-session 实现会话 需要cookie-parse
router.get(‘/restricted‘, function(req, res, next) { // 会话 req.session.restricted = true; if(!req.session.restrictedCount){ req.session.restrictedCount = 1; }else{ req.session.restrictedCount++; } res.redirect(‘/library‘); }); router.get(‘/library‘, function(req, res, next){ console.log(util.inspect({cookie:req.cookies})); if(req.session.restricted){ res.render(‘test‘,{title:req.session.restrictedCount}); }else{ res.render(‘test‘,{title:‘welcome‘}); } })
2、basic-auth-connect 基本的http身份验证
两种方式
全局验证
var basicAuth = require(‘basic-auth-connect‘); var auth = basicAuth(function(user, pass){ return (user === ‘test‘ && pass === ‘test‘); });
为一个单独的路由验证
var basicAuth = require(‘basic-auth-connect‘); var auth = basicAuth(function(user, pass){ return (user === ‘test‘ && pass === ‘test‘); }); router.get(‘/library‘, auth, function(req, res, next){
3、express-session 会话身份验证:管理会话。
删除身份验证:destroy 注意要写对
redirect时,不要加{}
书上的例子是需要body-parse cookie-parse(secret), 官网的例子是只需要express-session
教程:http://www.cnblogs.com/chenchenluo/p/4197181.html
服务器端发送session两种方式:cookie, url重写
不设置maxage的话,浏览器关闭就会失效
一般会写入内存,但也可以写入其他数据库。
官网教程:https://github.com/expressjs/session
默认是内存存储;上线之后,要存入到数据库中。
session()的属性
cookie:path,httponly, secure, maxAge
secure:true->https
secure:false->http, trust proxy
genid
name:同一主机(hostname+port),需用name区分session
proxy
resave: 如果有touch,则设false;否则设true,一般为true
rolling:false
saveUninitialized:
secret:store, unset
方法:regenerate destory reload save touch(跟新maxAge的属性)
属性:req.session.id req.session.cookie req.sessionID
存储到数据库
有body-parse cookie-parse可以,单独使用express-session也可以(官网),以下只是使用了destroy regenerate方法,还有很多功能没用到。
var bodyParser = require(‘body-parser‘); var cookieParser = require(‘cookie-parser‘); var session = require(‘express-session‘); app.use(cookieParser(‘sfp‘)); app.use(session()); router.get(‘/restricted‘, function(req, res, next) { // 会话 if(req.session.user){ res.render(‘result‘, { title: ‘title‘, success: req.session.success }) }else{ console.log(‘error‘+req.session.error); req.session.error = ‘access denied‘; res.redirect(‘/login‘); } }); router.get(‘/logout‘, function(req, res, next) { // 会话 req.session.destroy(function(){ res.redirect(‘/login‘); }) }); router.get(‘/login‘, function(req, res, next) { // 会话 if(req.session.user){ console.log(‘get login user‘); res.redirect(‘/restricted‘); }else if(req.session.error){ console.log(‘get login error‘); res.render(‘test‘, { title: ‘login‘, response: req.session.error }) }else{ console.log(‘get login‘); res.render(‘test‘, { title: ‘login‘, response: ‘get‘ }) } }); router.post(‘/login‘, function(req, res, next) { console.log(req.body.uname); console.log(req.body.pw); // 会话 var user = {name: req.body.uname, password:md5(‘test‘)}; if(user.password === md5(req.body.pw)){ console.log(‘post login success‘); req.session.regenerate(function(){ req.session.user = user; req.session.success = ‘auth as ‘+user.name; res.redirect(‘/restricted‘); }) }else{ console.log(‘post login fail‘); req.session.regenerate(function(){ req.session.error = ‘auth faild‘; res.redirect(‘/restricted‘); }) } });
标签:
原文地址:http://www.cnblogs.com/wang-jing/p/4977685.html