我使用Sails.js和Waterlock。
我认为有可能用自定义覆盖登录/注册操作,但没有找到任何示例。 怎么可能呢,请你为我提供Sails.js / Waterlock登录行动的自定义实现动作的任何示例(教程)?
请简要描述一下解决方案,不幸的是,我只是通过线索来理解一切并不是那么有经验。提前谢谢。
答案 0 :(得分:2)
我能够通过以下方式覆盖注册和登录操作:
/* -------------------------------- 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'});
}
});
},