gpt4 book ai didi

node.js - PassportJS 在创建用户后挂起

转载 作者:太空宇宙 更新时间:2023-11-04 00:44:31 24 4
gpt4 key购买 nike

在我使用 Passport 注册用户后,屏幕只是挂起,并且不会将我重定向到 successRedirect 中设置的屏幕:

模型/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));
})
}));

所以基本上发生的事情是它在数据库中创建条目,并将其保留在注册屏幕上并加载。它说正在等待本地主机,但会永远持续下去。我是 Passport 和 Sequelize 的新手,任何帮助将不胜感激。

最佳答案

我相信您的问题出在这个代码块中:

newUser.save().then(function(){
done(null, newUser);
})

由于您正在调用 done 但没有返回它,Bluebird(sequelize 使用的 Promise 库)会将该 Promise 视为返回 undefined。因此,它会并行运行其余代码,而无需等待其解析。

尝试在语句中添加 return:

newUser.save().then(function(){
return done(null, newUser);
})

关于node.js - PassportJS 在创建用户后挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35284639/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com