summaryrefslogtreecommitdiff
path: root/server/lib/auth.js
diff options
context:
space:
mode:
Diffstat (limited to 'server/lib/auth.js')
-rw-r--r--server/lib/auth.js53
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