2

もちろん、Passport-local と node.js で認証を実行しようとしています。ただし、次のエラーが引き続き発生します。

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);
    }
));
4

1 に答える 1

3

done()コールバックを 2 回呼び出しています。あなたのif文の中、そして最後のもの。

if/else および success/error のロジックは常に何かを行う必要があるため、最後のものは必要ありません。

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);
        });
    }
));
于 2014-08-28T13:46:12.590 に答える