在Node JS和Express上使用Passport时缺少凭据



我正在做一个开发API的项目。问题是,我正在使用Passport,有个东西会给我一个"丢失凭证"的错误。我到处都找遍了,不知道该怎么办。

Index.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 with SignUp Function

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);
};

我已经尝试添加正文解析,但没有任何改变。我找遍了所有论坛,但仍然没有答案。

我看到你在DB保存电子邮件和密码,但是你没有保存盐来比较从用户收到的密码在登录时,你已经保存在DB。https://en.wikipedia.org/wiki/Salt_(加密)

  1. 通过email从数据库获取用户
  2. 检查从该用户的数据库中保存的user + salt收到的散列密码是否等于数据库中的散列密码。或者只是去掉盐,不散列密码(但强烈不建议),之后它将工作,尝试复杂化的任务和散列密码不加盐。在它将工作后,尝试添加盐。

看这个例子如何使用passport与本地策略+ Express。https://github.com/jaredhanson/passport-local/wiki/Examples

最新更新