Node.js 模块之【passport】第三方【Github】鉴权(二)
来源:互联网 发布:法国人接吻 知乎 编辑:程序博客网 时间:2024/05/16 18:59
1. 安装模块
npm i connect-mongo --save-devnpm i passport --save-devnpm 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);
0 0
- Node.js 模块之【passport】第三方【Github】鉴权(二)
- Node.js第三方模块之download
- Node.js第三方模块之htmlparser2
- Node.js第三方模块之htmlparser2
- Node.js 模块之【passport】进行本地【用户名+密码】鉴权(一)
- Node.js第三方模块之download-cli
- Node.js实现GitHub第三方登录
- node第三方库之【mongoose模块】
- node第三方登陆github(express)
- Node.js第三方库之request
- Node.js第三方模块的离线安装
- Node.js 入门系列——寻找第三方模块
- Node.js加载第三方SDK作为node_modules模块
- node.js passport
- 使用node.js的第三方模块Mongoose访问mongodb(六)
- Node.js里Cannot find moudle(针对第三方模块)
- nw.js node-webkit系列(15)如何使用内部模块和第三方模块进行开发
- node.js之模块
- set/multiset用法详解 multi(复选)
- Qt_ 错误:cannot open output file debug\myWidget2.exe: Permission denied问题
- Java 集合SortedSet&SortedMap讲解
- 走进 Redis 的世界
- BLE启动加密和暂停加密规程
- Node.js 模块之【passport】第三方【Github】鉴权(二)
- L2-001. 紧急救援
- 百炼2787
- windows 7 激活工具
- 如何将eclipse下R3-QUery源码项目导入到Intellij idea部署运行
- 设计模式--Singleton(转自http://cantellow.iteye.com/blog/838473)
- Java EE基础知识学习(二)
- LintCode | 93. 平衡二叉树
- System.exit()用法