2014-06-08 4 views
0

Я использую экспресс 4 с паспортом js для аутентификации пользователей. Передний конец - угловой JS.узел js express4 и паспорт js длинный знак в

я в основном сталкивается с двумя проблемами: 1 знак в длинен, это занимает до 15 секунд, чтобы войти в 2 раз войти в систему, если я перезапустить сервер узла просмотра ÂË и, обновите страницу Я вернулся. на страницу входа, даже если в браузере установлен файл cookie.

Это то, что я имею в бэкэнде

passport.serializeUser(function (user, done) { 
     done(null, user._id); 
    }); 

    passport.deserializeUser(function (id, done) { 
     User.findById(id, function (err, user) { 
      user.password = undefined; 
      done(err, user); 
     }); 
    }); 

    passport.use(new LocalStrategy(function (username, password, done) { 
     User.findOne({ username: username }, function (err, user) { 
      if (err) { 
       return done(err); 
      } 
      if (!user) { 
       return done(null, false, { message: messages['116']}); 
      } 
      user.comparePassword(password, function (err, isMatch) { 
       if (err) { 
        return done(err); 
       } 
       if (isMatch) { 
        return done(null, user); 
       } else { 
        return done(null, false, { message: messages['116']}); 
       } 
      }); 
     }); 
    })); 

app.use(favicon()); 
app.use(logger('dev')); 
app.use(bodyParser.json()); 
app.use(bodyParser.urlencoded()); 
app.use(express.static(path.join(__dirname, 'public'))); 
app.use(cookieParser('a very hard to guess string')); 
app.use(session({ 
     secret: 'a very hard to guess string' 
    } 
)); 
app.use(passport.initialize()); 
app.use(passport.session()); 

Следующее является Войти маршрут:

router.post('/signin', function (req, res, next) { 
    var result = _.cloneDeep(SwissArmyKnife.resultObjSkel); 

    var username = req.body.username; 
    var password = req.body.password; 

    if (_.isEmpty(username)) { 
     result.error.reasons.push(SwissArmyKnife.messages['118']); 
    } 

    if (_.isEmpty(password)) { 
     result.error.reasons.push(SwissArmyKnife.messages['119']); 
    } 

    if (!_.isEmpty(result.error.reasons)) { 
     return res.json(200, result); 
    } 

    passport.authenticate('local', function (err, user, info) { 
     if (err) { 
      return next(err); 
     } 
     if (user) { 
      req.login(user, function (err) { 
       if (err) { 
        return next(err); 
       } 
       result.result = true; 
       return res.json(200, result); 
      }) 
     } 
     if (info) { 
      result.error.reasons.push(info.message); 
      return res.json(200, result); 
     } 
    })(req, res, next); 
}); 

при отладке выше коды я замечаю огромную задержку, когда код достигает

passport.authenticate('local', function (err, user, info) { 

что может быть проблемой ??? что я делаю неправильно?

Заранее спасибо.

ответ

0

Причина, по которой вы видите страницу входа после перезапуска сервера, связана с тем, что вы используете хранилище памяти для своих сеансов. Как вы заметили, это имеет только большую полезность, и вместо этого вы должны использовать некоторое постоянное хранилище (например, redis).

+0

благодарит много, что имеет смысл, любое представление о длительном процессе аутентификации ???? – Fouad

+0

Попробуйте комментировать код (info) и проверьте, уменьшено ли общее время. –

Смежные вопросы