1

ExpressとMongooseを使用して、ユーザー入力の検証を行おうとしています。以前は、ユーザーモデルの「パスワード」フィールドに「最小長」バリデーターを直接設定していました。入力されたパスワード文字列が十分に長いことを確認し、そうでない場合は、ユーザーを保存しようとしたときに作成されたValidationErrorオブジェクトに渡されます。これはユーザーに返送され、適切なフォームフィールドに表示されます。

しかし、ハッシュ、ソルト、暗号化を実装したので、これは正しく機能しません。パスワードのハッシュバージョンは、元のパスワードよりもはるかに長くなります。だから私はこのようなことをすることができると思いました:

exports.createNewUser = function(req, res, next){

    var user = new User({
            email : req.body.email
        , name : req.body.name
    })
    ,   minLength = Validator.minLength(req.body.password);

    if (!minLength) return next(new Error('Password aint right length'));

    user.setPassword(req.body.password);

    user.save(function(err){
        if (!err) return res.redirect('/');
        else {
            console.log('error saving usr', err);
            err['body'] = req.body;
            return res.render('user/register', err);
        }
    });
};

問題はそれです

return next(new Error('err message')); 

単にコンソールに表示されます。マングースの検証エラーオブジェクトにアタッチする方法が必要です。何か案は?

4

1 に答える 1

1

少し見て回った後、私は解決策を見つけました。基本的に、モデルを保存する前に、モデルで「validate」関数を呼び出すことができます。次に、モデルに必ずしも設定されていない他のプロパティに追加の検証を適用できます。この場合、ハッシュ化されていないパスワード文字列の長さをテストして、十分な長さであるかどうかを確認しています。そうでない場合は、返されたerrオブジェクトにオブジェクトを追加します。その後、これをフォームに送り返すことができます。

user.validate(function(err){
        if (req.body.password.length < 20) {
            err.errors.password = { type : 'the pw should be longer'};
        }
        console.log(err);
    });
于 2012-08-02T06:27:31.090 に答える