Explorar el Código

WIP: add serialize/deserializeUser settings

Yuki Takei hace 8 años
padre
commit
acf13a0c2f
Se han modificado 3 ficheros con 57 adiciones y 43 borrados
  1. 26 17
      lib/crowi/index.js
  2. 1 1
      lib/routes/index.js
  3. 30 25
      lib/routes/login.js

+ 26 - 17
lib/crowi/index.js

@@ -257,24 +257,33 @@ Crowi.prototype.setupPassport = function() {
     , LocalStrategy = require('passport-local').Strategy
     , User = this.model('User');
 
-  return new Promise(function(resolve, reject) {
-    passport.use(new LocalStrategy(
-      {
-        usernameField: 'loginForm[email]',
-        passwordField: 'loginForm[password]'
-      },
-      function(username, password, done) {
-        User.findUserByEmailAndPassword(username, password, function(err, user) {
-          if (err) { return done(err); }
-          if (!user) {
-            return done(null, false, { message: 'Incorrect username.' });
-          }
-          return done(null, user);
-        });
-      }
-    ));
-    resolve();
+  passport.use(new LocalStrategy(
+    {
+      usernameField: 'loginForm[email]',
+      passwordField: 'loginForm[password]'
+    },
+    function(username, password, done) {
+      User.findUserByEmailAndPassword(username, password, function(err, user) {
+        if (err) { return done(err); }
+        if (!user) {
+          return done(null, false, { message: 'Incorrect username.' });
+        }
+        return done(null, user);
+      });
+    }
+  ));
+
+  passport.serializeUser(function(user, done) {
+    done(null, user.id);
+  });
+
+  passport.deserializeUser(function(id, done) {
+    User.findById(id, function(err, user) {
+      done(err, user);
+    });
   });
+
+  return Promise.resolve();
 }
 
 Crowi.prototype.setupSearcher = function() {

+ 1 - 1
lib/routes/index.js

@@ -27,7 +27,7 @@ module.exports = function(crowi, app) {
   //app.post('/installer/user'         , middleware.applicationNotInstalled() , installer.createFirstUser);
 
   app.get('/login/error/:reason'     , login.error);
-  app.get('/login'                   , middleware.applicationInstalled()    , login.loginWithPassport);
+  app.get('/login'                   , middleware.applicationInstalled()    , login.login);
   app.get('/login/invited'           , login.invited);
   app.post('/login/activateInvited'  , form.invited                         , csrf, login.invited);
   app.post('/login'                  , form.login                           , csrf, login.loginWithPassport);

+ 30 - 25
lib/routes/login.js

@@ -39,6 +39,16 @@ module.exports = function(crowi, app) {
     }
   };
 
+  var loginSuccessForPassport = function(req, res, userData) {
+    var jumpTo = req.session.jumpTo;
+    if (jumpTo) {
+      req.session.jumpTo = null;
+      return res.redirect(jumpTo);
+    } else {
+      return res.redirect('/');
+    }
+  };
+
   var loginFailure = function(req, res) {
     req.flash('warningMessage', 'Sign in failure.');
     return res.redirect('/login');
@@ -87,7 +97,7 @@ module.exports = function(crowi, app) {
               debug(err);
             }
           });
-          loginSuccess(req, res, userData);
+          loginSuccessForPassport(req, res, userData);
         } else {
           loginFailure(req, res);
         }
@@ -104,33 +114,28 @@ module.exports = function(crowi, app) {
   actions.loginWithPassport = function(req, res, next) {
     var loginForm = req.body.loginForm;
 
-    if (req.method == 'POST' && req.form.isValid) {
-
-      passport.authenticate('local', function(err, user, info) {
-        debug('---authentication with passport start---');
-        debug('user', user);
-        debug('info', info);
-
-        if (err) { return loginFailure(req, res); }
-        if (!user) { return loginFailure(req, res); }
-        req.logIn(user, function(err) {
-          if (err != null) {
-            debug(err);
-            return loginFailure(req, res);
-          }
-          return loginSuccess(req, res, user);
-        });
-
-        debug('---authentication with passport end---');
-      })(req, res, next);
-
-    } else { // method GET
-      if (req.form) {
-        debug(req.form.errors);
-      }
+    if (!req.form.isValid) {
       return res.render('login', {
       });
     }
+
+    passport.authenticate('local', function(err, user, info) {
+      debug('---authentication with passport start---');
+      debug('user', user);
+      debug('info', info);
+
+      if (err) { return loginFailure(req, res); }
+      if (!user) { return loginFailure(req, res); }
+      req.logIn(user, function(err) {
+        if (err != null) {
+          debug(err);
+          return loginFailure(req, res);
+        }
+        return loginSuccess(req, res, user);
+      });
+
+      debug('---authentication with passport end---');
+    })(req, res, next);
   }
 
   actions.loginGoogle = function(req, res) {