我正在做一个开发API的项目。问题是我正在使用Passport,有一个错误“缺少凭据”。我到处都找遍了,不知道该怎么办。
索引.js的一部分
app.use(express.static(publicc));
app.use(express.json());
app.use(bodyParser.urlencoded({ extended: true }));
app.use(passport.initialize());
app.use(session({
secret: 'secret',
resave: false,
saveUninitialized: false
}));
app.use(passport.session());
app.use(cors());
app.use(morgan('dev'));
带注册功能的Passport.js
passport.use('signup', new localStrategy({
usernameField: 'email',
passwordField: 'password',
passReqToCallback: true
}, async (email, password, done) => {
try {
console.log('si')
const user = await findUser(email);
if (user.length > 0) {
return done(null, false, { message: 'User already exists' });
}
const salt = await bcrypt.genSalt(10);
const hashedPassword = await bcrypt.hash(password, salt);
const newUser = {
user_name: req.body.user_name,
user_role: req.body.user_role,
email: email,
user_password: hashedPassword
};
console.log(newUser);
const result = await createUser(newUser);
return done(null, newUser);
}
catch (error) {
console.log('si')
done(error);
}
}
));
带SingUp的控制器
const postSignup = async (req, res, next) => {
passport.authenticate('signup', { session: false }, async(err, user, info) => {
try{
console.log(req.body);
if(err){
const error = new Error('An error occurred');
return next(error);
}
const message = info.message;
if(!user){
res.status(401).json({ success: false, message });
return
}
return res.json({succes: true, message});
}catch(error){
return next(error);
}
})(req, res, next);
};
我已经试过添加正文解析,但没有任何变化。我已经搜索了每个论坛,但仍然没有答案。
1条答案
按热度按时间qhhrdooz1#
我看到您正在DB中保存电子邮件和密码,但您没有保存盐来比较登录时从用户收到的密码与您保存在DB中的密码。https://en.wikipedia.org/wiki/Salt_(cryptography)您进入身份验证。
1.通过电子邮件从数据库获取用户。
1.检查您从用户收到的散列密码+保存在数据库中的此用户的salt是否等于您数据库中的散列密码。或者只是删除salt,不散列密码(但强烈不建议),在它将工作后,尝试使任务复杂化,散列没有salt的密码。在它将工作后,尝试添加salt。
看看这个例子如何使用护照与本地策略+快递. https://github.com/jaredhanson/passport-local/wiki/Examples