【问题标题】:PassportJS Compare Confirm Password FieldPassportJS 比较确认密码字段
【发布时间】:2016-11-19 14:37:30
【问题描述】:

我正在将 PassportJS 与我的 ExpressJS 应用程序一起使用,并且我正在尝试在我的用户注册时设置密码确认字段。我最初的想法是让它成为一个视图/控制器设置,而不是涉及一个模型来简化这个过程,但是我在尝试实现这个逻辑的方式上遇到了问题,因为我的 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>

【问题讨论】:

    标签: express passport.js passport-local


    【解决方案1】:

    如果找不到解决方案,请使用 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>
    

    【讨论】:

      猜你喜欢
      • 2017-09-01
      • 2013-11-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-02
      • 1970-01-01
      相关资源
      最近更新 更多