Node.js 模块之【passport】第三方【Github】鉴权(二)
2017-03-15 19:24
681 查看
1. 安装模块
npm i connect-mongo --save-dev npm i passport --save-dev npm i passport-github --save
2. 引入模块及其他依赖模块
var session = require('express-session'); var MongoStore = require('connect-mongo')(session); var passport = require('passport'); var GithubStrategy = require('passport-github').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. 添加Github鉴权策略
passport.use(new GithubStrategy({ clientID:'【Your ClientID】', clientSecret:'【Your Secret】', callbackURL:'【Your CallBack】' },function(accessToken,refreshToken,profile,done) { UserModel.findOne({ githubId: profile.id }, function(err, user) { if (err) { return done(err); } else { if (!user) { user = new UserModel({ githubId:profile.id, username:profile.username }); user.save(); return done(null, user); }else{ return done(null, user); } } }); }));
5. 使用connect-mongo保存
app.use(session({ resave: false, saveUninitialized: true, cookie: { maxAge: 36000000 /*单位:毫秒*/ }, secret: "robin shop", store: new MongoStore({ url:'mongodb://localhost/【Your MongoDB】' }) }));
6. 封装权限检查中间件
var isAuthenticated = function(req, res, next) { if (req.isAuthenticated() || (req.user && req.user.provider)) { return next(); } res.redirect('/login'); }
7. 设置Github登陆路由及其回调
app.get('/auth/github', passport.authenticate('github')); app.get('/auth/github/callback', passport.authenticate('github', { failureRedirect: '/login' }), function(req, res) { res.redirect('/users'); });
8. 登出销毁session
app.get('/logout', function(req, res) { req.logout(); res.redirect('/login'); });
9. 权限限定
app.use('/users', isAuthenticated, users); app.use('/products', isAuthenticated, products); app.use('/upload', isAuthenticated, upload);
相关文章推荐
- Node.js 模块之【passport】进行本地【用户名+密码】鉴权(一)
- Node.js ejs模块(第三方模块) 视图模板解析
- Node.js第三方模块之download
- node.js 第三方模块如何安装(使用npm)及介绍
- 使用node.js的第三方模块Mongoose访问mongodb(六)
- Node.js第三方模块之htmlparser2
- 4000 Node.js里Cannot find moudle(针对第三方模块)
- Node.js实现GitHub第三方登录
- nw.js node-webkit系列(15)如何使用内部模块和第三方模块进行开发
- Node.js 安装第三方模块包(npm),通过 package.json配置信息安装项目依赖的模块
- node.js 第三方模块如何安装(使用npm)及介绍
- Node.js第三方模块之download-cli
- node.js学习笔记--NPM(Node Package Manager:Node.js的第三方模块、包管理器)
- Node.js第三方模块的离线安装
- Node.js内置的工具和第三方模块来进行单步调试
- Node.js 入门系列——寻找第三方模块
- Node.js-2.模块
- 解析Node.js基于模块和包的代码部署方式
- 在Windows平台上安装Node.js及NPM模块管理