使用 sailsjs 护照身份验证本地策略既不会给出任何错误,也不会对用户进行身份验证

Using sailsjs passport Authentication Local strategy is neither giving any error nor authenticating the user

本文关键字:身份验证 错误 任何 用户 策略 使用 sailsjs      更新时间:2023-09-26

我正在尝试在此博客之后的项目中实施护照本地策略。我已经在配置中创建了护照js文件。

var passport = require('passport'),
  LocalStrategy = require('passport-local').Strategy;
passport.serializeUser(function(user, done) {
  done(null, user.id);
});
passport.deserializeUser(function(id, done) {
  User.findById(id, function(err, user) {
    done(err, user);
  });
});
passport.use(new LocalStrategy({
    usernameField: 'username',
    passwordField: 'password'
  },
  function(username, password, done) {
    console.log("User Authenticating...." + username + 'and' + password);
    User.findOne({
      username: username
    }).exec(function(err, user) {
      if (err) {
        return done(err);
      }
      if (!user) {
        return done(null, false, {
          message: 'Unknown user ' + username
        });
      }
      if (user.password != password) {
        return done(null, false, {
          message: 'Invalid password'
        });
      }
      return done(null, user);
    });
  }
));

我已经根据建议更新了HTTPJS

  middleware: {
    passportInit    : require('passport').initialize(),
    passportSession : require('passport').session(),
     order: [
            'startRequestTimer',
            'cookieParser',
            'session',
            'passportInit',     
            'passportSession', 
            'myRequestLogger',
            'bodyParser',
            'handleBodyParserError',
            'compress',
            'methodOverride',
            'poweredBy',
            'router',
            'www',
            'favicon',
            '404',
            '500'
          ]
     }
  /***************************************************************************
  *                                                                          *
  * The number of seconds to cache flat files on disk being served by        *
  * Express static middleware (by default, these files are in `.tmp/public`) *
  *                                                                          *
  * The HTTP static cache is only active in a 'production' environment,      *
  * since that's the only time Express will cache flat-files.                *
  *                                                                          *
  ***************************************************************************/
  // cache: 31557600000
};
现在,当我尝试从我的身份验证控制器调用本地策略时,作为

login: function (req, res) {
    var user = req.body.user;
    // check user
    if (!user) {
      //send bad request
      return res.status(500).json({payload : {}, message : "Undefined user"});
    }
    var username = (user.username !== undefined)? user.username : false;
    var password = (user.password != undefined)? user.password : false;
    // Grab user fields.
    if (!username || !password) {
      //send bad request
      return res.status(400).json({payload : {}, message : "Invalid username or password"});
    }
    console.log("before authenticated");
    console.log("username="+username);
    console.log("password="+password);
    passport.authenticate('local', function(err, user, info) {
      console.log("User Authenticated");
      if (err) {
        console.log("error=errpr");
        return res.status(400).json({payload : {error: err}, message : info.message});
      }
      if (!user) {
        console.log("error=user");
        return res.status(400).json({payload : {error: err}, message : info.message});
      }
      console.log("User Authenticated2");
      _authTokenRequestCb(user,req,res);
    })(req,res);
  },

它从不对 Paasportjs 中的用户和控制台日志语句进行身份验证。

console.log("用户身份验证...."+用户名+'和'+密码);

也从未执行过。我也没有收到任何错误.谁能建议我哪里弄错了。

更新:I在此堆栈问题中发现"如果未提供'电子邮件'或'密码',护照就会自动失败。我想一些文档会很有用!."但是作为控制台日志语句,给我用户名和密码(在注册块中)

console.log("before authenticated");
console.log("username="+username);
console.log("password="+password);

所以我相信情况并非如此。谢谢

您是否创建了一个策略文件来说明要对哪些控制器操作进行身份验证?Passport 没有拒绝访问控制器的策略。为此,您必须创建另一个策略。

看看这个答案:护照认证在Sails JS应用程序中不起作用

如果这没有帮助,请告诉我。