express学习-----使用session、cookie判断用户登录状态
2018-08-10 16:37
429 查看
一. 使用cookie-parser、express-session来处理cookie和session。
// 引入 const cookieParser = require('cookie-parser'); const session = require('express-session'); // 使用 app.use(cookieParser('swq'));// 'swq'是自定义字符串,用来对cookie进行签名,提高安全性。 app.use(session({ secret: 'swq', resave: false, saveUninitialized: true }))
二. 登陆成功后,将用户ID生成cookie。
home.login = (req, res, next) => { let data = req.body; if(data.username == '') { return res.send({resultCode: 400, resultMsg: '用户名为空'}); } else if(data.password == '') { return res.send({resultCode: 400, resultMsg: '密码为空'}); } else { User.findOne({name: data.name}).then(user => { if(!user) { return res.send({resultCode: 400, resultMsg: '用户不存在'}); } if(data.password != user.password) { return res.send({resultCode: 400, resultMsg: '密码错误'}); } //生成cookie auth.gen_session(user, res); return res.send({resultCode: 200, resultMsg: '登录成功'}); }) } } // 生成cookie gen_session: (user, res) => { let auth_user = `${user._id}`; res.cookie('suweiqing', auth_user, { path: '/', signed: true,//对cookie密码进行加密的话, 需要使用到cookieParser httpOnly: true, maxAge: 30 * 24 * 60 * 60 * 1000 }); },
三. 编写中间件,判断用户是否登录(判断session中是否有用户信息)。
//通过cookie去生成session的方法 app.use(auth.authUser); authUser: (req, res, next) => { //中间件, 所有的请求都要经过它, 我们在这来判断用户的登录情况 if(req.session.user) { next();//用户已经登录情况下, 直接下一步 } else { //需要通过cookie去生成session //1.获取cookie let auth_token = req.signedCookies['suweiqing'];//cookie-parser直接帮我解密了 if (!auth_token) { next();//用户没有cookie的情况 } else { //2.通过cookie生成session let user_id = auth_token; //数据库去找这个用户ID User.findOne({_id: user_id}, (err, user) => { if (err) { return res.end(err); } else { if (!user) { next(); } else { //3.结束 req.session.user = user; next(); } } }) } } }Created with Raphaël 2.1.2判断是否有req.session.usernext()获取cookie判断是否有cookie根据cookie,从数据库得到user判断是否有user保存user到sessionyesnoyesnoyesno
四. 设置已登录用户和未登录用户的权限。
(1)已登录用户不能访问未登录界面//判断用户未登录的中间件 userRequired: (req, res, next) => { if(!req.session || !req.session.user || !req.session.user._id) { return res.redirect('/login'); } next(); }(2)未登录用户不能访问已登录界面
//判断用户已登录的中间件 userNotRequired: (req, res, next) => { if(req.session.user != undefined) { return res.redirect('back'); } next(); }(3) 使用权限中间件
router.get('/', auth.userRequired,home.index); router.get('/login', auth.userNotRequired, home.loginPage)阅读更多
相关文章推荐
- Asp.Net使用加密cookie代替session验证用户登录状态 源码分享 欢迎拍砖
- 使用加密cookie代替session验证用户登录状态
- Asp.Net使用加密cookie代替session验证用户登录状态 源码分享
- Java使用cookie和session管理用户状态
- php中如何同时使用session和cookie来保存用户登录信息
- 【wpf WebBrowser 清空网站的Cookie&Session 清空用户登录状态】
- php中如何同时使用session和cookie来保存用户登录信息
- php 依据session与cookie用户登录状态操作类
- 使用cookie保存用户的登录状态——初步实现
- PHP学习笔记:使用session来存储用户的登录信息
- jsp利用session记录登陆状态,保证用户的使用连贯性,并且防止未登录用户绕过登陆页
- [入门]永远的用户登录 - cookie使用 ---学习中。
- php同时使用session和cookie来保存用户登录信息
- MVC使用Memcache+Cookie解决分布式系统共享登录状态学习笔记6
- PHP根据session与cookie用户登录状态操作类的代码
- 登录判断 之 asp.net 使用继承类的Session,判断用户是否登录
- destoon 的登录过程,如何使用cookie来判断用户是否登录
- 使用COOKIE对像实现保存用户基本信息(结合Session),ASP.Net实现用户登录全过程
- 关于用户登录状态存session,cookie还是数据库或者memcache的优劣
- 使用cookie,session,filter等技术实现用户自动登录