问题描述
我正在使用express js创建api端点。我已使用passport js
和jwt
进行用户身份验证。使用Sequelize与数据库进行交互。
在Controller中,我收到{message: 'Missing Credentials'}
错误。
passport.use('login',new LocalStrategy({ usernameField: 'email',passwordField: 'password',session: false },async (email,password,done) => {
try {
const user = await User.findOne({ where: { email: email }});
if (user === null) {
return done(null,false,{ message: 'bad username' });
} else {
bcrypt.compare(password,user.password).then(response => {
if (response !== true) {
console.log('passwords do not match');
return done(null,{ message: 'passwords do not match' });
}
console.log('user found & authenticated');
// note the return needed with passport local - remove this return for passport JWT
return done(null,user);
});
}
} catch (err) {
return done(err);
}
})
);
LoginController.js
const loginUser = async (req,res,next) => {
passport.authenticate('login',(err,user,info) => {
console.log(err); // null
console.log(user); //false
console.log(info); // { message: 'Missing Credentials' }
if (err || (!user)) {
res.status(419).json({
message: "Incorrect Username or Password",isSuccess: false
});
} else {
try {
req.login(user,{ session: false },async (error) => {
const token = jwt.sign({ id: user.email },jwt_secret);
res.status(200).json({
message: "Login Successfull",isSuccess: true,token
});
});
} catch (error) {
res.status(419).json({
message: "Incorrect Username or Password",isSuccess: false
});
}
}
})(req,next);
};
请帮助我找到解决方案。谢谢
解决方法
尝试类似的操作,然后删除位置
passport.use(new LocalStrategy(
function(email,done) {
User.findOne({ email: email},function (err,user) {
if (err) { return done(err); }
if (!user) { return done(null,false); }
return done(null,user);
});
}
));