使用Passport - Expressjs Passportjs验证快速应用程序

时间:2013-12-22 20:43:48

标签: javascript session express passport.js

我有express个应用,我正在尝试使用passport-local进行身份验证。这是我的express应用:

app.use(express.bodyParser());
app.use(express.cookieParser());
app.use(express.session({ secret: 'this is a string' }));
app.use(passport.initialize());
app.use(passport.session());

client = new pg.Client(connectionString);
client.connect();

passport.use(new LocalStrategy(
  function(username, password, done) {
    var query = client.query('SELECT * FROM users WHERE EMAIL = $1', [username], function(err, result){
      if(err) {
        console.log("Error");
        return done(err);
      }
      if(!result.rows.length > 0) {
        console.log("No users");
        return done(null, false, { message: 'User not found'});
      }
      if(result.rows[0].password !== password) {
        console.log("incorrect password");
        return done(null, false, { message: 'Password Incorrect'});
      }
      console.log('authenticated');
      return done(null, result.rows[0]);
    });
  }
));

passport.serializeUser(function(user, done) {
  'use strict';
  console.log('serialize');
  console.log(user);
  done(null, user.email);
});

passport.deserializeUser(function(id, done) {
  'use strict';
  console.log('deserialize');
  User.findById(id, function(err, user) {
    done(err, user);
  });
});

app.post('/login', passport.authenticate('local'), function(req, res) {
  'use strict';
  console.log(req.user.username);
});

app.listen(port, function() {
  'use strict';
  console.log('Listening on:', port);
});

然后我点击/login网址,json我的身体{username: 'jason@gmail.com', password: 'password}。LocalStrategy}。我浏览了done函数,然后在序列化函数中,它进入http函数,然后挂起。我没有错误或额外的日志记录,连接只是保持打开状态,控制权不会返回给调用者。我从未收到session状态,只是挂起。

我认为这是{{1}}的问题,但我不明白接下来要做什么?

1 个答案:

答案 0 :(得分:1)

好的,你可以尝试重定向吗?看起来你的session / auth是好的,如果你在那时得到一个合适的用户名。

app.post('/login', passport.authenticate('local', { 
  successRedirect: '/somewhere_intern', 
  failureRedirect: '/login' 
}));