Created
May 23, 2012 23:39
-
-
Save chad3814/2778491 to your computer and use it in GitHub Desktop.
problem with passportjs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
passport.use('twitter', new TwitterStrategy({ | |
consumerKey: config.tw_consumer_key, | |
consumerSecret: config.tw_secret, | |
callbackURL: config.base_url + '/twitter/callback' | |
}, function (token, token_secret, profile, done) { | |
// twitter callback comes here to get the twuser obj | |
log.info('got twitter profile:', profile); | |
var TWUser = require('../models/twuser'); | |
// find the twitter obj if it exists | |
db.findTWUser({providerid: profile.id}, function (err, doc) { | |
if (err) { | |
done(err, null); | |
return; | |
} | |
var twuser; | |
if (!doc) { | |
// create a new twitter obj | |
twuser = new TWUser(profile, token, token_secret); | |
db.saveTWUser(twuser.pack(), function (err, doc) { | |
if (err) { | |
done(err, null); | |
return; | |
} | |
twuser = TWUser.unpack(doc); | |
done(null, twuser); | |
}); | |
} | |
// unpack doc into obj | |
twuser = TWUser.unpack(doc); | |
done(null, twuser); | |
}); | |
})); | |
passport.use('facebook', new FacebookStrategy({ | |
clientID: config.fb_appid, | |
clientSecret: config.fb_secret, | |
callbackURL: config.base_url + '/facebook/callback' | |
}, function (access_token, refresh_token, profile, done) { | |
// facebook callback comes here to get the fbuser obj | |
var FBUser = require('../models/fbuser'); | |
db.findFBUser({providerid: profile.id}, function (err, doc) { | |
if (err) { | |
done(err, null); | |
return; | |
} | |
var fbuser; | |
if (!doc) { | |
// creata new fbuser obj | |
fbuser = new FBUser(profile, access_token); | |
db.saveFBUser(fbuser.pack(), function (err, doc) { | |
if (err) { | |
done(err, null); | |
return; | |
} | |
fbuser = FBUser.unpack(doc); | |
done(null, fbuser); | |
}); | |
} | |
// unpack the doc into the obj | |
fbuser = FBUser.unpack(doc); | |
done(null, fbuser); | |
}); | |
})); | |
var app = express.createServer(); | |
app.set('view engine', 'jade'); | |
app.use(weblog.logger); | |
// to catch favicon.ico; should improve | |
app.use('/', express.static(__dirname + '/public')); | |
app.use(express.cookieParser()); | |
app.use(express.bodyParser()); | |
app.use(express.session({ | |
secret: config.SESSION_SECRET, | |
store: session_store | |
})); | |
app.use(passport.initialize()); | |
app.use(passport.session()); | |
app.use(express.errorHandler({ dumpExceptions: true, showStack: true })); | |
app.use(app.router); | |
app.get('/facebook', passport.authorize('facebook', { | |
scope: 'email' | |
})); | |
app.get('/twitter', passport.authorize('twitter')); | |
app.get('/facebook/callback', passport.authorize('facebook', {failureRedirect: '/reg'}), function (req, res) { | |
weblog.error("successful fb callback, req.account:", req.account); | |
res.render('reg.jade', { | |
account: req.account, | |
provider: 'fb' | |
}); | |
}); | |
app.get('/twitter/callback', passport.authorize('twitter', {failureRedirect: '/reg'}), function (req, res) { | |
weblog.info("successful tw callback, req.account:", req.account); | |
res.render('reg.jade', { | |
account: req.account, | |
provider: 'tw' | |
}); | |
}); | |
app.post('/register', function (req, res) { | |
log.info("reg post, req.body:", req.body); | |
var User = require('../models/user'); | |
var FBUser = require('../models/fbuser'); | |
var TWUser = require('../models/twuser'); | |
// at this point we have the user info in the body | |
var user = new User(req.body.email, req.body.first, req.body.last); | |
var findFunc = null; // finding the twuser or fbuser is the same process, this is the db function to find it | |
if (req.body.provider === 'fb') { | |
findFunc = delegate(db, db.findFBUser); | |
} else if (req.body.provider === 'tw') { | |
findFunc = delegate(db, db.findTWUser); | |
} else { | |
res.render(500); | |
return; | |
} | |
findFunc({providerid: req.body.pid}, function (err, provider_doc) { | |
log.info("inside findFBUser"); | |
if (err) { | |
log.info('failed to find the provider doc:', err); | |
res.end(err); | |
return; | |
} | |
if (req.body.provider === 'fb') { | |
user.fbid = provider_doc._id; | |
} else if (req.body.provider === 'tw') { | |
user.twid = provider_doc._id; | |
} | |
// save the user | |
db.saveUser(user.pack(), function (err, doc) { | |
log.info('user saved, doc:', doc); | |
if (err) { | |
log.info('error:', err); | |
res.end(err); | |
return; | |
} | |
user = User.unpack(doc); | |
if (user.hasError()) { | |
log.info('user error:', user); | |
res.end(user._err); | |
return; | |
} | |
// save the password | |
db.setHashedPassword(user, req.body.password, function (err) { | |
if (err) { | |
res.end(err); | |
return; | |
} | |
req.user = user; | |
log.info('successfully created account:', user); | |
res.redirect('/'); | |
}); | |
}); | |
}); | |
}); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment