Sails.js Waterlock如何覆盖login操作(如何编写自定义login操作)

我使用Sails.js和Waterlock。

  1. 在一个地方,我需要能够通过电话号码而不是电子邮件来validation我的用户(比如说)。
  2. 在其他地方,我应该有一个唯一的密码,这将是唯一的身份validation字段。

我以为有可能会覆盖login/注册行动与自定义的一个,但没有find任何例子。 怎么可以这样做,请你给我提供任何Sails.js / Waterlocklogin操作的自定义实现动作示例(教程)?

请简要描述一下解决scheme,不幸的是,我不是那么有经验,只是通过线索来理解一切。 提前致谢。

我可以通过以下方式覆盖注册和login操作:

/* -------------------------------- Signup ---------------------------------*/ /** * Adds a new user and logs in for the first time * Signup normally works out of box but in order to do custom validation and * add fields to user we had to add our own */ signup: function( req, res){ // Perform validation for data that will be used before we store var invalid = {}; if( !UserService.validateUsername( req.param('username'), invalid ) || !UserService.validatePassword( req.param('password'), invalid ) ) { return res.badRequest( invalid ); } // Get the autentiacation parameters out var params = req.allParams(); var auth = { email: params.email, password: params.password }; // Remove password from data delete(params.password); // Create user and authentication User.create(params).exec(function(err, user){ if(err){ return res.negotiate( err ); } waterlock.engine.attachAuthToUser(auth, user, function(err, ua){ if(err){ res.json(err); }else{ waterlock.cycle.loginSuccess(req, res, ua); } }); }); }, /* -------------------------------- Login ---------------------------------*/ /** * Logs in a user */ login: function( req, res ) { var params = req.allParams(); var auth = { email: params.email, password: params.password }; waterlock.engine.findAuth({ email: auth.email }, function(err, user){ if(err){ return res.json(err); } if (user) { if(bcrypt.compareSync(auth.password, user.auth.password)){ waterlock.cycle.loginSuccess(req, res, user); }else{ waterlock.cycle.loginFailure(req, res, user, {error: 'Invalid email or password'}); } } else { //TODO redirect to register waterlock.cycle.loginFailure(req, res, null, {error: 'user not found'}); } }); },