大佬教程收集整理的这篇文章主要介绍了node.js – Passport中的自定义重定向,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我现在想要重复扣除社交帐户用户.因此,每当有新用户通过twitter auth进入时,我想将它们重定向到收集电子邮件的页面.我保存作为会话变量返回的令牌和配置文件对象,并在将表单作为隐藏字段提交时将在该页面上重用它们.
但是,我无法理解如何使用Passport实现此方面.这是我到目前为止的代码,其中包含对我要对每个部分做什么的评论.基本上我正在检查twitter用户是否是旧用户,如果不是我正在设置我将在/ addemail页面上重用的会话变量,初始化用户对象(以便serialize,Deserialize函数有一些行为(不确定我理解)什么序列化/反序列化实际上.)现在如果用户是新用户,会话变量NewTwitterUser为true,我在auth / callBACk url中检查它以将用户重定向到适当的页面.但是这不起作用.
//basic modules and setup var express = require('express'),passport = require('passport'),mongoose = require('mongoose'),http = require('http'),util = require('util'),TwitterStrategy = require('passport-twitter').Strategy,FacebookStrategy = require('passport-facebook').Strategy,path = require('path'); var app = express(); //Mongodb setup var scheR_269_11845@a = mongoose.scheR_269_11845@a; var ObjectId = scheR_269_11845@a.objectId; var UserscheR_269_11845@a = new scheR_269_11845@a({ provider: String,uid: String,fb_uid: String,twitter_uid: String,name: String,firs@R_874_6218@: String,gender: String,fb_username: String,twitter_username: String,profile_pic: String,email: String,LOCATIOn: String,birthday: String,created: {type: Date,default: Date.Now} }); var User = mongoose.model('User',UserscheR_269_11845@a); mongoose.connect('MongoHQ db connection here')' //User Authentication - Twitter passport.use(new TwitterStrategy({ consumerKey: 'KEY',consumerSecret : 'SECRET',callBACkURL: "CALLBACKURL",passReqToCallBACk: true },function(req,token,tokenSecret,profile,donE){ User.findOne({twitter_uid: profile.iD},function(err,user){ if (err) { console.log('this is an error 1' + err); return done(err);} if(user){ console.log('this user' + user); done(null,user); } else { console.log('this is a new user'); req.session.token = token; req.session.tokenSecret = tokenSecret; req.session.profile = profile; req.session.newtwitteruser = true; var user = new User(); user.uid = profile.id; done(null,user); /* This part is commented and is the default code I had if I needed to simply create a Twitter User right here. var user = new User(); user.provider = profile.provider; user.uid = profile.id; user.twitter_uid = profile.id; user.name = profile.displayName; user.firs@R_874_6218@ = profile.displayName[0]; user.twitter_username = profile._json.screen_name; user.profile_pic = profile._json.profile_image_url; user.LOCATIOn = profile._json.LOCATIOn; user.save(function(err){ if(err) {throw err;} else {done(null,user);} });*/ } }); } )); //User Authentication - Facebook passport.use(new FacebookStrategy({ clientID: 'ID',clientSecret: 'SECRET',callBACkURL: "URL" },function(accessToken,refreshToken,donE){ User.findOne({fb_uid: profile.iD},user){ if (err) {return done(err);} if(user){ done(null,user); } else { var user = new User(); user.provider = profile.provider; user.uid = profile.id; user.fb_uid = profile.id; user.name = profile.displayName; user.firs@R_874_6218@ = profile._json.firs@R_874_6218@; user.gender = profile._json.gender; user.fb_username = profile._json.username; user.profile_pic = 'https://graph.facebook.com/' + profile.id + '/picture'; user.email = profile._json.email; user.LOCATIOn = profile._json.LOCATIOn.name; user.birthday = profile._json.birthday; user.save(function(err){ if(err) {throw err;} else {done(null,user);} }); } }) } )); passport.serializeUser(function(user,donE) { done(null,user.uid); }); passport.deserializeUser(function(uid,donE) { User.findOne({uid: uiD},function (err,user) { done(err,user); }); }); //app configurations app.configure(function(){ app.set('port',process.env.PORT || 3000); app.set('views',__dirname + '/views'); app.set('view ENGIne','jade'); app.use(express.bodyParser()); app.use(express.methodOverride()); app.use(express.cookieParser("freecookie")); app.use(express.session({secret:"freecookie"})); app.use(express.static(path.join(__dirname,'public'))); app.use(express.errorHandler()); app.use(passport.initialize()); app.use(passport.session()); app.use(app.router); }); //Basic RoutIng app.get('/',res){ res.render('home',{title: 'App title',user: req.user}); }); app.get('/auth/twitter',passport.authenticate('twitter')); app.get('/auth/twitter/callBACk',passport.authenticate('twitter',{failureRedirect: '/login' }),res) { if (req.session.newtwitteruser){ res.redirect('/addemail');} else {res.redirect('/');} }); app.get('/addemail',res){ if (req.session.newtwitteruser){ res.render('email',{title: 'Add your Email'});} else {res.redirect('/');} }); app.get('/auth/facebook',passport.authenticate('facebook',{scope: ['email','user_LOCATIOn','user_birthday'] })); app.get('/auth/facebook/callBACk',{ successRedirect: '/',failureRedirect: '/login' })); app.get('/logout',res){ req.logout(); res.redirect('/'); }); //create the server var server = http.createServer(app); server.listen(app.get('port')); //checks if a request is authenticated function ensureAuthenticated(req,res,next) { if (req.isAuthenticated()) { return next(); } res.redirect('/login') }
app.get('/auth/twitter',passport.authenticate('twitter')); app.get('/auth/twitter/callBACk',{ successRedirect: '/addemail',failureRedirect: '/' }));
然后,在您的addemail功能中,我会检查他们是否已经有电子邮件,之后您可以将它们重定向到适当的位置.
app.get('/addemail',res){ if (req.user.email){ res.render('email',{title: 'Add your Email'});} else {res.redirect('/');} });
以上是大佬教程为你收集整理的node.js – Passport中的自定义重定向全部内容,希望文章能够帮你解决node.js – Passport中的自定义重定向所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。