2014-08-28 53 views
2

我一直在尝试执行一些身份验证与Passport本地和node.js当然。不过,我不断收到以下错误:Node.JS /护照 - 错误:发送后无法设置标题。在ServerResponse.OutgoingMessage.setHeader

Error: Can't set headers after they are sent. 
    at ServerResponse.OutgoingMessage.setHeader (http.js:689:11) 
    at ServerResponse.header (/home/denny/workspace/nodejs-ecommerce/e-shop/node_modules/express/lib/response.js:717:10) 
    at ServerResponse.res.location (/home/denny/workspace/nodejs-ecommerce/e-shop/node_modules/express/lib/response.js:831:8) 
    at ServerResponse.redirect (/home/denny/workspace/nodejs-ecommerce/e-shop/node_modules/express/lib/response.js:870:8) 
    at complete (/home/denny/workspace/nodejs-ecommerce/e-shop/node_modules/passport/lib/middleware/authenticate.js:241:26) 
    at /home/denny/workspace/nodejs-ecommerce/e-shop/node_modules/passport/lib/middleware/authenticate.js:250:15 
    at pass (/home/denny/workspace/nodejs-ecommerce/e-shop/node_modules/passport/lib/authenticator.js:427:14) 
    at Authenticator.transformAuthInfo (/home/denny/workspace/nodejs-ecommerce/e-shop/node_modules/passport/lib/authenticator.js:449:5) 
    at /home/denny/workspace/nodejs-ecommerce/e-shop/node_modules/passport/lib/middleware/authenticate.js:247:22 
    at /home/denny/workspace/nodejs-ecommerce/e-shop/node_modules/passport/lib/http/request.js:51:7 

我的代码如下:

passport.use(new LocalStrategy({usernameField:'email', passwordField: 'password'}, 
    function(email, password, done) { 
    User.find({ where: { email: email }}).success(function(user) { 
      if (!user) { 
      done(null, false, { message: 'Unknown user' }); 
      } 
      else if (password != user.password) { 
      done(null, false, { message: 'Invalid password'}); 
      } 
      else { 
      done(null, user); 
      } 
      }).error(function(err){ 
      done(err); 
     }); 
     return done(null, false); 
    } 
)); 

回答

3

你调用done()回调的两倍。在你的if语句中,然后是最后一个。

最后一个是不需要的,因为你的if/else和成功/错误的逻辑应该总是有所作为。

passport.use(new LocalStrategy({ 
     usernameField: 'email', 
     passwordField: 'password' 
    }, 
    function(email, password, done) { 
     User.find({ 
      where: { 
       email: email 
      } 
     }).success(function(user) { 
      if (!user) { 
       done(null, false, { 
        message: 'Unknown user' 
       }); 
      } else if (password != user.password) { 
       done(null, false, { 
        message: 'Invalid password' 
       }); 
      } else { 
       done(null, user); 
      } 
     }).error(function(err) { 
      done(err); 
     }); 
    } 
)); 
+0

谢谢......它的工作原理:-) – Denny 2014-08-28 13:52:18

+2

如果它有效,你应该接受他的答案。 – 2014-08-28 15:04:04

+0

还有一件事......如果登录凭据无效,我如何将相应的错误消息(例如“无效密码”)传递给我的模板?我正在使用快速车把。 – Denny 2014-08-29 06:26:31

相关问题