diff options
Diffstat (limited to 'server/lib/auth.js')
| -rw-r--r-- | server/lib/auth.js | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/server/lib/auth.js b/server/lib/auth.js new file mode 100644 index 0000000..93fe223 --- /dev/null +++ b/server/lib/auth.js @@ -0,0 +1,53 @@ +/* jshint node: true */ + +var passport = require('passport'), + _ = require('lodash'), + config = require('../../config.json'), + User = require('./schemas/User'); + +var entities = new Entities(); + +var auth = { + + login: function (method) { + return passport.authenticate(method); + }, + + logout: function (req, res) { + req.logout(); + res.redirect('/'); + }, + + serializeUser: function (user, done) { + done(null, user.twitter_id); + }, + + deserializeUser: function (id, done) { + User.findOne({ twitter_id: id }, "_id displayName username photo", function (err, user) { + done(err, user); + }); + }, + + insertUser: function (accessToken, refreshToken, profile, done) { + process.nextTick(function () { + var userData = { + username: profile.username, + displayName: profile.displayName, + photo: profile.photos[0].value + }; + User.update({twitter_id: profile.id}, userData, {upsert: true}, function (userData, profile, err) { + return done(err, _.merge(userData, {twitter_id: profile.id})); + }.bind(this, userData, profile)); + }); + }, + + loggedIn: function () { + return passport.authenticate('twitter', { + successReturnToOrRedirect: '/', + failureRedirect: '/login' + }); + }, + +} + +module.exports = auth |
