Passport(本地)挂在身份验证上

时间:2014-02-18 03:55:53

标签: node.js express passport.js

我将护照本地策略设置如下,任何一个失败案例都可以正常工作。但是,如果我验证服务器日志“d1”然后挂起,请求仍处于“挂起”状态:

passport.use(
    new LocalStrategy({
        usernameField: 'email',
        passwordField: 'password'
    },
    function(email, password, done) {
        User.getUser(email, password).then(function(users){

            if(users && users.length == 1) {
                console.log('d1')
                return done(null,users[0]) ; 
            } else {
                console.log('d2')
                return done(null, false, { message: 'Incorrect credentials.' });
            }
        }, function(e){
            console.log('d3')
            return done(null, false, { message: 'Incorrect credentials.' });
        });
    })
);

passport.serializeUser(function(user, done) {
    console.log('s1')
    done(null, user);
});

passport.deserializeUser(function(user, done) {
    console.log('s2')
    done(null, user);
});


server.post(authPostRoute
    , passport.authenticate('local',{
        successRedirect : "/ideas",
        failureRedirect : "/",
    })
);

理想情况下,我不想重定向成功/失败,而宁愿将一些JSON返回给浏览器。但我似乎无法让这个简单的方案起作用。

更新 - 追溯到passport-local / strategy.js

上面做的是来自strategy.js的这个函数

   function verified(err, user, info) {
    if (err) { return self.error(err); }
        if (!user) { return self.fail(info); }

    //console.log(self.success.toString())
    self.success(user, info);
   }

这一切都很好。 self.success似乎是一个有效的函数,但它没有被调用,正如我所知道的那样。

更新II: passport / authenticate.js

看起来成功是在passport / authenticate.js中定义的函数

strategy.success = function(user, info) {

}

我好像到了

req.logIn(user, options, function(err) {

但永远不要进入该功能。我错过了logIn的定义吗?

更新III:登录

追溯到passport / http / prequest.js,这一行显然导致了问题

if (!this._passport) throw new Error('passport.initialize() middleware not in use');

虽然我以为我用它启用了它:

server.use(passport.initialize());

编辑更新IV:移动passport.initialize

我之前在流程中移动了护照初始化,现在成功和错误重定向似乎有效。

但我仍然无法控制对客户端的响应。我不想重定向。这是一个不同的问题吗?

1 个答案:

答案 0 :(得分:1)

我遇到了类似的问题并解决了passport.initialize早期的问题解决了这个问题,非常感谢。

  

但我仍然无法控制对客户端的响应。我不   想要重定向。这是一个不同的问题吗?

如果有人有这个问题; 对于自定义逻辑,您可以使用这样的回调。

router.post('/login', function(req, res, next) {
    passport.authenticate('local-signin', function(err, user, info) {
      if (err) { return next(err); }
      if (!user) {
        return res.render('account/login', {
          pageTitle: 'Sign in',
          form: req.body
        });
      }
      req.logIn(user, function(err) {
        if (err) { return next(err); }
        return res.redirect('/myaccount');
      });
    })(req, res, next);
});
相关问题