Node.js 模块之【passport】进行本地【用户名+密码】鉴权(一)
2017-03-14 14:39
495 查看
1. 安装 passport
npm i passport npm i passport-local
2. 添加模块(上面几个为依赖模块)
var cookieParser = require('cookie-parser'); var bodyParser = require('body-parser'); var session = require('express-session'); var MongoStore = require('connect-mongo')(session); var passport = require('passport'); var LocalStrategy = require('passport-local').Strategy;
3. 实现一些基本回调
passport.serializeUser(function(user, done) { done(null, user.id); }); passport.deserializeUser(function(id, done) { UserModel.findById(id, function(err, user) { done(err, user); }) });
4. 使用本地策略
passport.use(new LocalStrategy(function(username, password, done) { UserModel.findOne({ username: username }, function(err, user) { if (err) { return done(err); } else { if (!user) { return done(null, false, { message: '用户名不存在' }); } if (!user.password == password) { return done(null, false, { message: '密码不匹配' }); } return done(null, user); } }); }));
5. login时,通过logIn方法设置状态
app.post('/login', function(req, res, next) { passport.authenticate('local', function(err, user, info) { if (err) { return next(err); } if (!user) { return res.redirect('/login'); } // res.redirect('/users'); req.logIn(user, function(err) { if (err) { return next(err); } return res.redirect('/users'); }); })(req, res, next); });
6. 将passport中自定义的req.isAuthenticated 封装为插件
var isAuthenticated = function(req, res, next) { if (req.isAuthenticated()) { return next(); } res.redirect('/login'); }
7. 设置session保存至数据库
app.use(session({ resave: false, saveUninitialized: true, cookie: { maxAge: 3600000 //单位:毫秒 }, secret: "robin shop", store: new MongoStore({ url:'mongodb://localhost/emberExpressMongoDB' }) }));
8. 初始化passport
app.use(passport.initialize()); app.use(passport.session());
9. 路由中的使用
app.use('/users', isAuthenticated, users);
相关文章推荐
- Node.js 模块之【passport】第三方【Github】鉴权(二)
- [快速掌握]Node.js模块封装及本地使用以及发布
- node.js 使用fs模块对系统文件及目录进行读写操作
- nodejs require本地模块的一些细节笔记
- 前端对称加密--js对用户名密码进行DES加密
- Node.js Koa2使用JWT进行鉴权的方法示例
- node.js基于fs模块对系统文件及目录进行读写操作的方法详解
- Node.js利用断言模块assert进行单元测试的方法
- node.js 使用crypto模块进行RSA加解密操作
- node.js本地模块
- Node.js内置的工具和第三方模块来进行单步调试
- 利用js进行表单验证:判断用户名和密码非空
- nw.js node-webkit系列(15)如何使用内部模块和第三方模块进行开发
- 利用Node.js进行构建本地 推荐
- 使用node.js中的async模块进行数据库的同步操作
- 在Windows上安装Node.js模块的方法
- H3C交换机如何配置本地登录和远程登录的用户名和密码
- IIS 访问需要用户名和密码 (需要进行身份验证)
- IIS 下网站提示输入用户名密码进行身份验证解决方法
- 你应该知道的Node.js扩展模块——Hashish