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

时间:2015-01-25 18:30:02

标签: javascript node.js authentication sails.js passport.js

我正在尝试在blog之后的项目中实施护照本地策略。 我在config中创建了passportjs文件。



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



  现在,当我尝试从我的Auth控制器调用本地策略



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("用户身份验证...." +用户名+'和' +密码);

  

也从未执行过。我也没有收到任何错误。 任何人都可以建议我弄错了。

更新:我在此stack question"如果'电子邮件'或者密码'没有提供护照只是自动失败。我想一些有用的文档会很有用!" 但是作为控制台日志语句给我用户名和passwoprd(在registerblock

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

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

1 个答案:

答案 0 :(得分:0)

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

请看一下这个答案:Passport authentication not working in Sails JS application

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