PageRenderTime 52ms CodeModel.GetById 27ms RepoModel.GetById 0ms app.codeStats 0ms

/app/config/passport.js

https://github.com/asejdina/passport
JavaScript | 256 lines | 181 code | 50 blank | 25 comment | 17 complexity | 858a210577851fa8b93d074e97275bbc MD5 | raw file
  1. 'use strict';
  2. var LocalStrategy = require('passport-local').Strategy;
  3. var FacebookStrategy = require('passport-facebook').Strategy;
  4. var TwitterStrategy = require('passport-twitter').Strategy;
  5. var InstagramStrategy = require('passport-instagram').Strategy;
  6. var MailChimpStrategy = require('passport-mailchimp').Strategy;
  7. var traceur = require('traceur');
  8. var User = traceur.require(__dirname + '/../models/user.js');
  9. var userCollection = global.nss.db.collection('users');
  10. var _ = require('lodash');
  11. var configAuth = require('./auth');
  12. module.exports = function(passport) {
  13. passport.serializeUser(function(user, done) {
  14. done(null, user._id);
  15. });
  16. passport.deserializeUser(function(id, done) {
  17. User.findById(id, function(err, user) {
  18. done(err, user);
  19. });
  20. });
  21. // *********** LOCAL SIGNUP ***************
  22. passport.use('local-signup', new LocalStrategy({
  23. usernameField : 'email',
  24. passwordField : 'password',
  25. passReqToCallback : true
  26. },
  27. function(req, email, password, done) {
  28. req.flash('signupMessage', '');
  29. process.nextTick(function() {
  30. userCollection.findOne({ 'local.email' : email }, function(err, user) {
  31. if (err){
  32. return done(err);
  33. }
  34. if (user) {
  35. return done(null, false, req.flash('signupMessage', 'That email is already taken.'));
  36. } else {
  37. var newUser = new User();
  38. newUser.local.email = email;
  39. newUser.local.password = newUser.generateHash(password);
  40. newUser.save(function(err) {
  41. if (err){
  42. throw err;
  43. }
  44. return done(null, newUser);
  45. });
  46. }
  47. });
  48. });
  49. }));
  50. // *************** LOCAL LOGIN *****************
  51. passport.use('local-login', new LocalStrategy({
  52. usernameField : 'email',
  53. passwordField : 'password',
  54. passReqToCallback : true
  55. },
  56. function(req, email, password, done) {
  57. userCollection.findOne({ 'local.email' : email }, function(err, user) {
  58. user = _.create(User.prototype, user);
  59. if (err){
  60. return done(err);
  61. }
  62. if (!user){
  63. return done(null, false, req.flash('loginMessage', 'No user found.')); // req.flash is the way to set flashdata using connect-flash
  64. }
  65. if (!user.validPassword(password)){
  66. return done(null, false, req.flash('loginMessage', 'Oops! Wrong password.')); // create the loginMessage and save it to session as flashdata
  67. }
  68. return done(null, user);
  69. });
  70. }));
  71. // ******************* FACEBOOK ******************
  72. passport.use(new FacebookStrategy({
  73. clientID : configAuth.facebookAuth.clientID,
  74. clientSecret : configAuth.facebookAuth.clientSecret,
  75. callbackURL : configAuth.facebookAuth.callbackURL,
  76. passReqToCallback : true
  77. },
  78. function(req, token, refreshToken, profile, done) {
  79. process.nextTick(function() {
  80. if (!req.user) {
  81. userCollection.findOne({ 'facebook.id' : profile.id }, function(err, user) {
  82. if (err){
  83. return done(err);
  84. }
  85. if (user) {
  86. return done(null, user);
  87. } else {
  88. var newUser = new User();
  89. newUser.facebook.id = profile.id;
  90. newUser.facebook.token = token;
  91. newUser.facebook.name = profile.name.givenName + ' ' + profile.name.familyName;
  92. newUser.facebook.email = profile.emails[0].value;
  93. newUser.facebook.photos = profile.photos;
  94. newUser.save(function(err) {
  95. if (err){
  96. throw err;
  97. }
  98. return done(null, newUser);
  99. });
  100. }
  101. });
  102. } else {
  103. var user = req.user;
  104. user.facebook.id = profile.id;
  105. user.facebook.token = token;
  106. user.facebook.name = profile.name.givenName + ' ' + profile.name.familyName;
  107. user.facebook.email = profile.emails[0].value;
  108. user.facebook.photos = profile.photos;
  109. user = _.create(User.prototype, user);
  110. user.save(function(err) {
  111. if (err){
  112. throw err;
  113. }
  114. return done(null, user);
  115. });
  116. }
  117. });
  118. }));
  119. // ********************* TWITTER **********************
  120. passport.use(new TwitterStrategy({
  121. consumerKey : configAuth.twitterAuth.consumerKey,
  122. consumerSecret : configAuth.twitterAuth.consumerSecret,
  123. callbackURL : configAuth.twitterAuth.callbackURL,
  124. passReqToCallback : true
  125. },
  126. function(req, token, tokenSecret, profile, done) {
  127. process.nextTick(function() {
  128. var user = req.user;
  129. user.twitter.id = profile.id;
  130. user.twitter.token = token;
  131. user.twitter.username = profile.username;
  132. user.twitter.displayName = profile.displayName;
  133. user.twitter.photos = profile.photos;
  134. user = _.create(User.prototype, user);
  135. user.save(function(err) {
  136. if (err){
  137. throw err;
  138. }
  139. return done(null, user);
  140. });
  141. });
  142. }));
  143. // ********************* INSTAGRAM **********************
  144. // passport.use(new InstagramStrategy({
  145. //
  146. // clientID : configAuth.instagramAuth.clientID,
  147. // clientSecret : configAuth.instagramAuth.clientSecret,
  148. // callbackURL : configAuth.instagramAuth.callbackURL,
  149. // passReqToCallback : true
  150. // },
  151. //
  152. // function(req, accessToken, refreshToken, profile, done) {
  153. //
  154. // process.nextTrick(function() {
  155. //
  156. // userCollection.findOrCreate({ 'instagramId': profile.id }, function (err, user) {
  157. // return done(err, user);
  158. // });
  159. //
  160. // });
  161. // }
  162. // ));
  163. passport.use(new InstagramStrategy({
  164. clientID : configAuth.instagramAuth.clientID,
  165. clientSecret : configAuth.instagramAuth.clientSecret,
  166. callbackURL : configAuth.instagramAuth.callbackURL,
  167. passReqToCallback : true
  168. },
  169. function(req, token, refreshToken, profile, done) {
  170. process.nextTick(function() {
  171. var user = req.user;
  172. user.instagram.id = profile.id;
  173. user.instagram.token = token;
  174. user.instagram.username = profile.username;
  175. user = _.create(User.prototype, user);
  176. user.save(function(err) {
  177. if (err){
  178. throw err;
  179. }
  180. return done(null, user);
  181. });
  182. });
  183. }));
  184. // ********************* MailChimp **********************
  185. passport.use(new MailChimpStrategy({
  186. clientID : configAuth.mailChimpAuth.clientID,
  187. clientSecret : configAuth.mailChimpAuth.clientSecret,
  188. callbackURL : configAuth.mailChimpAuth.callbackURL,
  189. passReqToCallback : true
  190. },
  191. function(req, token, refreshToken, profile, done) {
  192. process.nextTick(function() {
  193. var user = req.user;
  194. user.mailChimp.id = profile.id;
  195. user.mailChimp.token = token;
  196. user.mailChimp.username = profile.username;
  197. user = _.create(User.prototype, user);
  198. user.save(function(err) {
  199. if (err){
  200. throw err;
  201. }
  202. return done(null,user);
  203. });
  204. });
  205. }));
  206. };