2017-08-08 5 views
2

以下は私のpassportJSの登録戦略です。ほとんどのコードは、passport.authenticateメソッドが戦略を正常に認証した後に、私がres.sendというユーザーの引数に行くところまで、正常に実行されます。しかし、私が応答を返送されるたびに、私は「偽」メッセージを含むページを受け取る。ユーザーの詳細を私に送信するのではなく、代わりに「偽」に送信されます。Passport JSがユーザーを取得できません

app.use(passport.initialize()); 
app.use(passport.session()); 

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

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

passport.use("registerUser", 
    new LocalStrategy({ passReqToCallback: true }, 
    function(req, username, password, done) { 
     var newUser = new User({ 
     name: username, 
     email: req.body.email, 
     password: password 
     }); 

     newUser.save(function(err) { 
     if (err) { 
      return done(err); 
     } 
     return done(null, newUser); 
     }); 
    })); 


app.get("/", function(req, res) { 
    res.render("index", { title: "Register!", url: req.url }); 
}); 

app.post("/", function(req, res, next) { 
    passport.authenticate("registerUser", function(err, user) { 
    if (err) { 
     return done(err); 
    } 
    res.send(user); 
    })(req, res, next); 
}); 
+0

'newUser'は戦略コールバックで' done'を呼び出す前に期待していたようですか? – vesse

+0

ええ、スキーマが同じです –

答えて

0

あなたはfunction(req, res)前に2番目の引数としてpassport.authenticate()を使用する必要があります

`app.post('/', passport.authenticate('registerUser', function(err, user) { 
    if (err) return done(err); 
    if (!user) return done(null, false); 
    done(null, user); 

})、関数(REQ、RES){ res.send(ユーザ)。 });

このようにして、レスポンスの前に実行される認証ミドルウェアが導入されました。ここをクリックしてください:https://github.com/passport/express-4.x-local-example/blob/master/server.js

+0

作成する必要があると思われる新機能がuser引数を持つ関数の範囲外であるため、そのオブジェクトに出力できません –

+0

@animsajルートハンドラは正しいです、それはちょうど[カスタムコールバック](http://passportjs.org/docs/#custom-callback)を使用しています。 – vesse

関連する問題