aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/config/passport.js
diff options
context:
space:
mode:
authorDennis Eriksen <dennis.se@gmail.com>2013-04-25 02:12:34 +0200
committerDennis Eriksen <dennis.se@gmail.com>2013-04-25 02:12:34 +0200
commit4dd7550b87386114ba4e86be17afbaa4d3fa11d6 (patch)
treefda64ece3ad24151f17c25f8c234755b753801a3 /config/passport.js
parenttest commit to dev branch (diff)
downloadDivid-4dd7550b87386114ba4e86be17afbaa4d3fa11d6.tar.gz
addedpassport config file and did some other stuff
Diffstat (limited to '')
-rw-r--r--config/passport.js109
1 files changed, 109 insertions, 0 deletions
diff --git a/config/passport.js b/config/passport.js
new file mode 100644
index 0000000..9518409
--- /dev/null
+++ b/config/passport.js
@@ -0,0 +1,109 @@
+// dependencies
+var mongoose = require('mongoose')
+ , LocalStrategy = require('passport-local').Strategy
+ , FacebookStrategy = require('passport-facebook').Strategy
+ , TwitterStrategy = require('passport-twitter').Strategy
+ , User = mongoose.model('User');
+
+/**
+ * This is where the magic happends
+ */
+
+module.exports = function (passport, config) {
+
+ // serialize sessions
+ passport.serializeUser( function(user, done) {
+ done(null, user.id);
+ });
+ passport.deserializeUser( function(id, done) {
+ User.findOne({ _id: id }, function(err, user) {
+ done(err, user);
+ });
+ });
+
+
+ /**
+ * Local strategy
+ */
+ passport.use(new LocalStrategy({
+ usernameField: 'email',
+ passwordField: 'password'
+ }, function(email, password, done) {
+
+ // looks up the user in the database, and check if password matches
+ User.findOne({ email: email }, function(err, user) {
+ if (err) return done(err);
+ if (!user) return done(null, false, { message: 'Unknown user' });
+ if (!user.authenticate(password)) return done(null, false, { message: 'Invalid password' });
+ return done(null, user);
+ });
+ }));
+
+
+ /**
+ * Facebook strategy
+ */
+ passport.use(new FacebookStrategy({
+ clientID: config.facebook.clientID
+ , clientSecret: config.facebook.clientSecret
+ , callbackURL: config.facebook.callbackURL
+ }, function(accessToken, refreshToken, profile, done) {
+
+ // looks up the user in the database. Will create the user if it does not exist
+ User.findOne({ 'facebook.id': profile.id }, function(err, user) {
+ if(err) return done(err);
+ if (!user) {
+ user = new User({
+ name: profile.displayName
+ , email: profile.emails[0].value
+ , username: profile.username
+ , provider: 'facebook'
+ , facebook: profile._json
+ });
+ user.save(function(err) {
+ if (err) console.log(err);
+ return done(err, user);
+ });
+ } else {
+ return done(err, user);
+ }
+ });
+ }));
+
+
+ /**
+ * Twitter strategy
+ */
+ passport.use(new TwitterStrategy({
+ consumerKey: config.twitter.clientID
+ , consumerSecret: config.twitter.clientSecret
+ , callbackURL: config.twitter.callbackURL
+ }, function(token, tokenSecret, profile, done) {
+
+ // looks up the user in the database. Will create the user if it does not exist
+ User.findOne({ 'twitter.id': profile.id }, function(err, user) {
+ if (err) return done(err);
+ if (!user) {
+ user = new User({
+ name: profile.displayName
+ , username: profile.username
+ , provider: 'twitter'
+ , twitter: profile._json
+ });
+ user.save(function(err) {
+ if (err) console.log(err);
+ return done(err, user);
+ });
+ } else {
+ return done(err, user);
+ }
+ });
+ }));
+
+
+
+
+
+
+}
+