Node.js Passport js本地策略自定义回调";“缺少凭据”;

Node.js Passport js本地策略自定义回调";“缺少凭据”;,node.js,express,passport.js,Node.js,Express,Passport.js,我对NodeJS、express 4和passport有一个非常恼人的问题。我已经尝试了我能想到的所有选择,但仍然没有解决办法。无法从其他帖子中找到此问题的解决方案 代码: 问题是,出于某种原因,passport没有获得凭据,并在console.log(info)“缺少凭据”,尽管当用户名和密码记录在上面时,它们是正确的。还应正确配置本地策略: passport.use(new LocalStrategy ({ usernameField: 'user_email', pass

我对NodeJS、express 4和passport有一个非常恼人的问题。我已经尝试了我能想到的所有选择,但仍然没有解决办法。无法从其他帖子中找到此问题的解决方案

代码:

问题是,出于某种原因,passport没有获得凭据,并在console.log(info)“缺少凭据”,尽管当用户名和密码记录在上面时,它们是正确的。还应正确配置本地策略:

passport.use(new LocalStrategy ({

    usernameField: 'user_email',
    passwordField: 'user_password',
    },

    function(username, password, done) {

        console.log(username);
        console.log(password);
...
“函数(用户名、密码、完成)”永远不会运行,因为“缺少凭据”

有趣的是,在另一个html/ejs页面中,通过以下方式调用身份验证:

app.post('/login_user', passport.authenticate('local', { successRedirect: '/loginSuccess', failureRedirect: '/loginFailure' }));
这个问题并不存在

有人知道我错过了什么吗


谢谢

有一个小错误或需要更正

你正在做:

app.post('/login', function(req, res, next) {

    console.log(req.body.user_email);
    console.log(req.body.user_password);

    passport.authenticate('local', function(err, user, info) {

        console.log(info);
只需创建一个用户变量并设置传入的用户电子邮件和用户密码,如下所示

app.post('/login', function(req, res, next) {

    console.log(req.body.user_email);
    console.log(req.body.user_password);

    var user = req.body;

    passport.authenticate('local', function(err, user, info) {

        console.log(info); 
这应该行得通。

如何以HTML格式格式化数据 在这里,我用它来说明您的问题:

这不好

只是我想要的输出

不使用(请求、恢复)关闭 虽然这可能一点也不相关,但如果我不这样做,同样的问题也会发生

  • 在启动passport.authenticate之前调用
    req和res参数
  • 关闭
    passport.authenticate
    后,使用
    (req,res)
  • 在函数结束时,您需要
    (req,res)
    ,因此:

    router.post('/signup', 
    (req, res, next) => passport.authenticate('whatever-your-strategy-name-is', function(err, user, info) {
    
        // Just to see the sample expected output
        res.send(JSON.stringify(info)).status(200)
    
      })(req, res)
    );
    
    在标准熟悉的JS中,它看起来是这样的

    router.post('/signup', function (req, res, next) {
    
      passport.authenticate('whatever-your-strategy-name-is', function(err, user, info) {
    
        // Just to see the sample expected output
        res.send(JSON.stringify(info)).status(200)
    
      })(req, res) // passport.authenticate ends here
    })
    

    以防万一,这对将来的人可能有用。。
    如果您使用邮递员并发送了一个POST请求(例如电子邮件和密码字段),您发现自己看到了“缺少凭据”响应确保响应的格式设置为JSON,而不是html或文本。这样的简单错误会让您陷入数小时的困境

    我遇到了缺少凭据的错误是在我将电子邮件作为第一个参数发送时发生的,但passport local strategy接受第一个参数用户名 因此,您需要将其设置为电子邮件,如下所示:

    passport.use(
        new LocalStrategy({ usernameField: "email" }, (email, password, done) => {
    

    你的
    应用程序是否使用(passport…
    在路由之前和会话中间件之后?是的,只有在passport之后才有中间件。使用的是i18n+对html/ejs文件所在的视图文件夹的定义。尝试发布完整的代码,如您如何配置,以及凭证是否记录在那里?已在您的S/O上回答未设置主体解析器middlewareI与OP和@Offirmo建议的app.use(bodyParser.json())存在类似的问题;解决了我的问题您没有使用您在任何地方创建的
    user
    变量。
    passport.use(
        new LocalStrategy({ usernameField: "email" }, (email, password, done) => {