【发布时间】:2016-05-19 00:01:07
【问题描述】:
在我使用护照注册用户后,屏幕只是挂起,并且不会将我重定向到成功重定向中设置的屏幕:
模型/user.js
var bcrypt = require('bcrypt');
module.exports = function(sequelize, DataType){
var User = sequelize.define('User', {
name: DataType.STRING,
localPassword: DataType.STRING,
lastName: DataType.STRING,
localEmail: DataType.STRING,
cellNumber: DataType.INTEGER
},
{
instanceMethods: {
validPassword: function(password){
return bcrypt.compareSync(password, this.password);
}
}
}
);
return User;
};
路由/index.js
router.post('/register', passport.authenticate('local-signup', {
successRedirect : '/',
failureRedirect : '/err',
failureFlash : true
}));
config/passportConfig.js
passport.serializeUser(function(user, done) {
done(null, user.id);
});
passport.deserializeUser(function(id, done) {
model.User.findById(id, function(err, user){
done(null, user);
});
});
passport.use('local-signup', new LocalStrategy({
usernameField : 'email',
passwordField : 'password',
passReqToCallback : true
},
function(req, email, password, done) {
model.User.findOne({
where: {
localEmail: email
}
}).then(function(existingUser) {
if (existingUser) {
return done(null, false, req.flash('loginMessage', 'That email is already taken.'));
}
else {
var hash = bcrypt.hashSync(password, 8);
var newUser = model.User.build({name: req.body.name, lastName: req.body.lastName, localEmail: req.body.email, cellNumber: req.body.cellNumber, localPassword: hash});
newUser.save().then(function(){
done(null, newUser);
}).catch(function(err){
done(null, false, req.flash('loginMessage', err))
});
}
})
.catch(function (e) {
done(null, false, req.flash('loginMessage',e.name + " " + e.message));
})
}));
所以基本上发生的事情是它在数据库中创建条目,然后它停留在注册屏幕上并加载。它说等待本地主机,但永远持续下去。我是新来的护照和续集,任何帮助将不胜感激。
【问题讨论】:
-
注意您的 bcrypt 部分:您应该为密码播种,通过从同步散列函数 (
hashSync(data, salt)) 切换到异步版本可以轻松提高性能。 (hash(data, salt, callback))(因为异步版本不会停止执行)。你现在正在做的是使用8作为盐,它是弱且非随机的。 (您可能想使用8作为genSalt的输入)
标签: node.js express passport.js sequelize.js