Express PassportJS比较确认密码字段

Express PassportJS比较确认密码字段,express,passport.js,passport-local,Express,Passport.js,Passport Local,我在ExpressJS应用程序中使用PassportJS,并尝试在用户注册时设置密码确认字段。我最初的想法是将此设置为视图/控制器设置,而不是使用模型来简化此过程,但我在尝试实现此逻辑时遇到了一个问题,因为我的passportJS localStrategy没有检查两个字段值是否匹配。我是否以正确的方式处理这个问题 PassportJS逻辑(req.user&&password==confirmPassword): var passport = require('passport'); var

我在ExpressJS应用程序中使用PassportJS,并尝试在用户注册时设置密码确认字段。我最初的想法是将此设置为视图/控制器设置,而不是使用模型来简化此过程,但我在尝试实现此逻辑时遇到了一个问题,因为我的passportJS localStrategy没有检查两个字段值是否匹配。我是否以正确的方式处理这个问题

PassportJS逻辑(req.user&&password==confirmPassword):

var passport = require('passport');
var LocalStrategy = require('passport-local').Strategy;
var models = require('../app/models/db-index');
var bcrypt   = require('bcrypt-nodejs');

    //Sign Up Logic
    passport.use('local-signup', new LocalStrategy({
        passReqToCallback: true,
        usernameField: 'email'
    }, function(req, email, password, done){
        models.User.findOne({
            where: {
                email: email
            }
        }).then(function(existingUser){
            if (existingUser)
                return done(null, false, req.flash('error', 'Email already exists.'));
            if (req.user && password === confirmPassword) {
                var user = req.user;
                user.firstName = firstName;
                user.lastName = lastName;
                user.email = email;
                user.password = models.User.generateHash(password);
                user.save().catch(function(err){
                    throw err;
                }).then(function(){
                    done(null, user, req.flash('error', 'All fields need to be filled in'));
                });
            } else {
                var newUser = models.User.build({
                    firstName: req.body.firstName,
                    lastName: req.body.lastName,
                    email: req.body.email,
                    password: models.User.generateHash(password)
                });

                newUser.save().then(function(){
                    done(null, newUser);
                }).catch(function(err){
                    done(null, false, console.log(err));
                });
            }
        }).catch(function(e){
            done(null, false, req.flash('error', 'All fields need to be filled in'),console.log(e.email + e.message));
        })
    }));
*====   /SIGN-UP    ====*/


    siteRoutes.route('/sign-up')

        .get(function(req, res){
            res.render('pages/site/sign-up.hbs',{
                error: req.flash('error')
            });
        })

        .post(passport.authenticate('local-signup', {
            successRedirect: '/app/sign-up/organization',
            failureRedirect: '/sign-up'
        }));
<!DOCTYPE html>
<head>
    {{> site/head}}
</head>
<body>
    {{> site/navigation}}
    <div class="container">
        <div class="col-md-6 col-md-offset-3">
            {{#if error}}
                <div class="alert alert-danger">{{error}}</div>
            {{/if}}
            <h1>Sign Up</h1>
            <form action="/sign-up" method="post">
                <input type="text" class="form-control" id="sign-up-fist-name"  name="firstName" value="" placeholder="First Name">
                <br />
                <input type="text" class="form-control" id="sign-up-username"  name="lastName" value="" placeholder="Last Name">
                <br />
                <input type="text" class="form-control" id="sign-up-username"  name="email" value="{{user.email}}" placeholder="Email">
                <br />
                <input type="password" class="form-control" id="sign-up-password"  name="password" value="" placeholder="Password">
                <br />
                <input type="password" class="form-control" id="sign-up-password"  name="confirmPassword" value="" placeholder="Confirm Password">
                    <button type="submit">Submit</button>
            </form>
            <a href="/login">Already have an account? Login here!</a>
        </div>
    </div>
</body>
路线:

var passport = require('passport');
var LocalStrategy = require('passport-local').Strategy;
var models = require('../app/models/db-index');
var bcrypt   = require('bcrypt-nodejs');

    //Sign Up Logic
    passport.use('local-signup', new LocalStrategy({
        passReqToCallback: true,
        usernameField: 'email'
    }, function(req, email, password, done){
        models.User.findOne({
            where: {
                email: email
            }
        }).then(function(existingUser){
            if (existingUser)
                return done(null, false, req.flash('error', 'Email already exists.'));
            if (req.user && password === confirmPassword) {
                var user = req.user;
                user.firstName = firstName;
                user.lastName = lastName;
                user.email = email;
                user.password = models.User.generateHash(password);
                user.save().catch(function(err){
                    throw err;
                }).then(function(){
                    done(null, user, req.flash('error', 'All fields need to be filled in'));
                });
            } else {
                var newUser = models.User.build({
                    firstName: req.body.firstName,
                    lastName: req.body.lastName,
                    email: req.body.email,
                    password: models.User.generateHash(password)
                });

                newUser.save().then(function(){
                    done(null, newUser);
                }).catch(function(err){
                    done(null, false, console.log(err));
                });
            }
        }).catch(function(e){
            done(null, false, req.flash('error', 'All fields need to be filled in'),console.log(e.email + e.message));
        })
    }));
*====   /SIGN-UP    ====*/


    siteRoutes.route('/sign-up')

        .get(function(req, res){
            res.render('pages/site/sign-up.hbs',{
                error: req.flash('error')
            });
        })

        .post(passport.authenticate('local-signup', {
            successRedirect: '/app/sign-up/organization',
            failureRedirect: '/sign-up'
        }));
<!DOCTYPE html>
<head>
    {{> site/head}}
</head>
<body>
    {{> site/navigation}}
    <div class="container">
        <div class="col-md-6 col-md-offset-3">
            {{#if error}}
                <div class="alert alert-danger">{{error}}</div>
            {{/if}}
            <h1>Sign Up</h1>
            <form action="/sign-up" method="post">
                <input type="text" class="form-control" id="sign-up-fist-name"  name="firstName" value="" placeholder="First Name">
                <br />
                <input type="text" class="form-control" id="sign-up-username"  name="lastName" value="" placeholder="Last Name">
                <br />
                <input type="text" class="form-control" id="sign-up-username"  name="email" value="{{user.email}}" placeholder="Email">
                <br />
                <input type="password" class="form-control" id="sign-up-password"  name="password" value="" placeholder="Password">
                <br />
                <input type="password" class="form-control" id="sign-up-password"  name="confirmPassword" value="" placeholder="Confirm Password">
                    <button type="submit">Submit</button>
            </form>
            <a href="/login">Already have an account? Login here!</a>
        </div>
    </div>
</body>
查看:

var passport = require('passport');
var LocalStrategy = require('passport-local').Strategy;
var models = require('../app/models/db-index');
var bcrypt   = require('bcrypt-nodejs');

    //Sign Up Logic
    passport.use('local-signup', new LocalStrategy({
        passReqToCallback: true,
        usernameField: 'email'
    }, function(req, email, password, done){
        models.User.findOne({
            where: {
                email: email
            }
        }).then(function(existingUser){
            if (existingUser)
                return done(null, false, req.flash('error', 'Email already exists.'));
            if (req.user && password === confirmPassword) {
                var user = req.user;
                user.firstName = firstName;
                user.lastName = lastName;
                user.email = email;
                user.password = models.User.generateHash(password);
                user.save().catch(function(err){
                    throw err;
                }).then(function(){
                    done(null, user, req.flash('error', 'All fields need to be filled in'));
                });
            } else {
                var newUser = models.User.build({
                    firstName: req.body.firstName,
                    lastName: req.body.lastName,
                    email: req.body.email,
                    password: models.User.generateHash(password)
                });

                newUser.save().then(function(){
                    done(null, newUser);
                }).catch(function(err){
                    done(null, false, console.log(err));
                });
            }
        }).catch(function(e){
            done(null, false, req.flash('error', 'All fields need to be filled in'),console.log(e.email + e.message));
        })
    }));
*====   /SIGN-UP    ====*/


    siteRoutes.route('/sign-up')

        .get(function(req, res){
            res.render('pages/site/sign-up.hbs',{
                error: req.flash('error')
            });
        })

        .post(passport.authenticate('local-signup', {
            successRedirect: '/app/sign-up/organization',
            failureRedirect: '/sign-up'
        }));
<!DOCTYPE html>
<head>
    {{> site/head}}
</head>
<body>
    {{> site/navigation}}
    <div class="container">
        <div class="col-md-6 col-md-offset-3">
            {{#if error}}
                <div class="alert alert-danger">{{error}}</div>
            {{/if}}
            <h1>Sign Up</h1>
            <form action="/sign-up" method="post">
                <input type="text" class="form-control" id="sign-up-fist-name"  name="firstName" value="" placeholder="First Name">
                <br />
                <input type="text" class="form-control" id="sign-up-username"  name="lastName" value="" placeholder="Last Name">
                <br />
                <input type="text" class="form-control" id="sign-up-username"  name="email" value="{{user.email}}" placeholder="Email">
                <br />
                <input type="password" class="form-control" id="sign-up-password"  name="password" value="" placeholder="Password">
                <br />
                <input type="password" class="form-control" id="sign-up-password"  name="confirmPassword" value="" placeholder="Confirm Password">
                    <button type="submit">Submit</button>
            </form>
            <a href="/login">Already have an account? Login here!</a>
        </div>
    </div>
</body>

{{>site/head}
{{>站点/导航}
{{{#如果出错}}
{{error}}
{{/if}
注册




提交
如果找不到解决方案,请使用javascript确认。这是我使用的最简单的方法。如果你找到解决办法,请和她分享,我想用它

<script>
    function myFunction() {
        var password = document.getElementById("password").value;
        var password2 = document.getElementById("password2").value;
        var ok = true;
        if (password != password2) {
            //$(".alert").alert();
            //alert("Passwords Do not match");
            document.getElementById("alert").style.display = 'block';
            document.getElementById("password").style.borderColor = "#E34234";
            document.getElementById("password2").style.borderColor = "#E34234";
            ok = false;
        } else {
            alert("Passwords Match!!!");
        }
        return ok;
    }
</script>

函数myFunction(){
var password=document.getElementById(“密码”).value;
var password2=document.getElementById(“password2”).value;
var-ok=true;
如果(密码!=密码2){
//$(“.alert”).alert();
//警报(“密码不匹配”);
document.getElementById(“警报”).style.display='block';
document.getElementById(“密码”).style.borderColor=“#E34234”;
document.getElementById(“密码2”).style.borderColor=“#E34234”;
ok=假;
}否则{
警报(“密码匹配!!!”;
}
返回ok;
}

如果找不到解决方案,请使用javascript确认。这是我使用的最简单的方法。如果你找到解决办法,请和她分享,我想用它

<script>
    function myFunction() {
        var password = document.getElementById("password").value;
        var password2 = document.getElementById("password2").value;
        var ok = true;
        if (password != password2) {
            //$(".alert").alert();
            //alert("Passwords Do not match");
            document.getElementById("alert").style.display = 'block';
            document.getElementById("password").style.borderColor = "#E34234";
            document.getElementById("password2").style.borderColor = "#E34234";
            ok = false;
        } else {
            alert("Passwords Match!!!");
        }
        return ok;
    }
</script>

函数myFunction(){
var password=document.getElementById(“密码”).value;
var password2=document.getElementById(“password2”).value;
var-ok=true;
如果(密码!=密码2){
//$(“.alert”).alert();
//警报(“密码不匹配”);
document.getElementById(“警报”).style.display='block';
document.getElementById(“密码”).style.borderColor=“#E34234”;
document.getElementById(“密码2”).style.borderColor=“#E34234”;
ok=假;
}否则{
警报(“密码匹配!!!”;
}
返回ok;
}