2016-09-10 9 views
1

Очень простой вопрос: если я попытаюсь проверить пароль в модели пользователя, кажется, я могу только проверить уже зашифрованный пароль? Так, например, если я используюПроверка правильного пароля Loopback

Customer.validatesLengthOf('password', { min: 8, message: 'Too short' }) 

Затем зашифрованный пароль проверяется (который всегда длиннее 8 символов), так что не хорошо ... Если я пытаюсь использовать пользовательскую проверку, как я могу получить доступ к исходному паролю (исходный req.body.password в основном)?

ответ

0

ok, нет ответа, так что я делаю, используя удаленный крючок, чтобы получить доступ к исходному простому паролю, и теперь это будет сделано.

var plainPwd 
Customer.beforeRemote('create', function (ctx, inst, next) { 
    plainPwd = ctx.req.body.password 
    next() 
}) 

Тогда я могу использовать его в пользовательской проверке:

Customer.validate('password', function (err, res) { 
    const pattern = new RegExp(/some-regex/) 
    if (plainPwd && ! pattern.test(plainPwd)) err() 
}, { message: 'Invalid format' }) 
0

Хорошо, я думаю, выше ответ довольно новый и, очевидно, будет принят, но если вы хотите реальное простое решение с только некоторыми основными сделанные проверки и не много кода, то loopback-mixin-complexity - это решение для вас.

Если вы не хотите создавать другую зависимость, вы можете использовать пользовательский mixin, который вы можете добавить в свою модель пользователя или любую другую модель, где вам нужна какая-либо проверка, и она проведет проверку вы.

Вот пример кода, как создать такой подмешать

module.exports = function(Model, options) { 
    'use strict'; 
    Model.observe('before save', function event(ctx, next) { //Observe any insert/update event on Model 
    if (ctx.instance) { 
     if(!yourValidatorFn(ctx.instance.password)) 
     next('password not valid'); 
     else 
     next(); 
    } 
    else { 
     if(!yourValidatorFn(ctx.data.password)) 
     next('password not valid'); 
     else 
     next(); 
    } 
    }); 
};