Yuki Takei 8 лет назад
Родитель
Сommit
6f5290b5a0
4 измененных файлов с 27 добавлено и 11 удалено
  1. 3 1
      lib/crowi/express-init.js
  2. 1 1
      lib/routes/index.js
  3. 7 7
      lib/routes/login-passport.js
  4. 16 2
      lib/util/middlewares.js

+ 3 - 1
lib/crowi/express-init.js

@@ -121,7 +121,9 @@ module.exports = function(crowi, app) {
   app.use(middleware.swigFilters(app, swig));
   app.use(middleware.swigFunctions(crowi, app));
 
-  app.use(middleware.loginChecker(crowi, app));
+  app.use(middleware.csrfKeyGenerator(crowi, app));
+  // app.use(middleware.loginChecker(crowi, app));
+  app.use(middleware.loginCheckerForPassport(crowi, app));
 
   app.use(i18nMiddleware.handle(i18next));
 };

+ 1 - 1
lib/routes/index.js

@@ -31,7 +31,7 @@ module.exports = function(crowi, app) {
   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, loginPassport.loginWithLocal);
+  app.post('/login'                  , form.login                           , csrf, loginPassport.loginWithLdap, loginPassport.loginWithLocal, loginPassport.loginFailure);
   app.post('/register'               , form.register                        , csrf, login.register);
   app.get('/register'                , middleware.applicationInstalled()    , login.register);
   app.post('/register/google'        , login.registerGoogle);

+ 7 - 7
lib/routes/login-passport.js

@@ -11,9 +11,7 @@ module.exports = function(crowi, app) {
    * @param {*} req
    * @param {*} res
    */
-  const loginSuccess = (req, res, userData) => {
-    req.session.user = userData;
-
+  const loginSuccess = (req, res, user) => {
     var jumpTo = req.session.jumpTo;
     if (jumpTo) {
       req.session.jumpTo = null;
@@ -29,13 +27,14 @@ module.exports = function(crowi, app) {
    * @param {*} res
    */
   const loginFailure = (req, res) => {
+    req.flash('warningMessage', 'Sign in failure.');
     return res.redirect('/login');
   };
 
 
   const loginWithLdap = (req, res, next) => {
     // TODO impl with vesse/passport-ldapauth
-    return next({});
+    return next();
   }
 
   /**
@@ -57,12 +56,12 @@ module.exports = function(crowi, app) {
       debug('user', user);
       debug('info', info);
 
-      if (err) { return loginFailure(req, res); }
-      if (!user) { return loginFailure(req, res); }
+      if (err) { return next(err); }
+      if (!user) { return next(); }
       req.logIn(user, (err) => {
         if (err != null) {
           debug(err);
-          return loginFailure(req, res);
+          return next();
         }
         return loginSuccess(req, res, user);
       });
@@ -72,6 +71,7 @@ module.exports = function(crowi, app) {
   }
 
   return {
+    loginFailure,
     loginWithLdap,
     loginWithLocal,
   };

+ 16 - 2
lib/util/middlewares.js

@@ -1,15 +1,22 @@
 var debug = require('debug')('crowi:lib:middlewares');
 var md5 = require('md5');
 
-exports.loginChecker = function(crowi, app) {
+exports.csrfKeyGenerator = function(crowi, app) {
   return function(req, res, next) {
-    var User = crowi.model('User');
     var csrfKey = (req.session && req.session.id) || 'anon';
 
     if (req.csrfToken === null) {
       req.csrfToken = crowi.getTokens().create(csrfKey);
     }
 
+    next();
+  }
+}
+
+exports.loginChecker = function(crowi, app) {
+  return function(req, res, next) {
+    var User = crowi.model('User');
+
     // session に user object が入ってる
     if (req.session.user && '_id' in req.session.user) {
       User.findById(req.session.user._id, function(err, userData) {
@@ -29,6 +36,13 @@ exports.loginChecker = function(crowi, app) {
   };
 };
 
+exports.loginCheckerForPassport = function(crowi, app) {
+  return function(req, res, next) {
+    res.locals.user = req.user;
+    next();
+  };
+};
+
 exports.csrfVerify = function(crowi, app) {
   return function(req, res, next) {
     var token = req.body._csrf || req.query._csrf || null;