1
私はExpressJSアプリケーションでPassportJSを使用していますが、私のユーザーがサインアップしてパスワード確認フィールドを設定しようとしています。私の元の考えは、このプロセスを簡略化するためにモデルを関与させるのではなく、ビュー/コントローラの設定にすることですが、パスポートとしてこのロジックを達成しようとしているところで問題があります。localStrategyは、一致。私は正しい方法でこれに近づいていますか?PassportJS Compareパスワードの確認フィールド
PassportJSロジック(req.user & &パスワード=== 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>