我正在尝试让用户注册我的网站,并将凭据存储在mongodb上。
这是我的auth.js文件,其中定义了路径:
router.post('/signup', (req,res,next) => {
Passport.authenticate('local-signup', err => {
if (err) {
if (err.name === "MongoError" && err.code === 11000) {
res.status(409).json({
success: false,
message: "Unsuccessful",
errors: {
email: "This email is already taken."
}
});
}
res.status(400).json({
success: false,
message: "Unsuccessful",
errors: {
unknown: "Could not process for some reason. Contact admin."
}
});
}
res.status(200).json({
success: true,
message: "Successful",
errors: {}
});
}) (res, req, next);
}
最后一个括号有点乱,但相信我,这不是语法错误。 这段代码是我定义护照策略的地方:
require ('../Models/Users')
const mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/onlinestore');
const User = mongoose.model('User');
const PassportLocalStrategy = require('passport-local').Strategy;
const Passport = require('passport');
module.exports = Passport.use(new PassportLocalStrategy({
usernameField: 'email',
passwordField: 'password',
session: false,
passReqToCallback: true,
}, (email, password, done) => {
let user = new User();
user.email = email.trim();
user.password = password.trim();
user.save(err => {
if (err) {
console.log(err);
return done(err);
} else {
console.log("Success");
return done(null);
}
});
}
));
该路线能够获取用户输入的密码和用户。当我点击提交时,字面上没有任何反应;服务器不控制任何东西,也不控制客户端。经过一些调试后,我认为问题是由于Passport.Authenticate没有被调用,但我不确定为什么。如有必要,我可以发布其他代码片段,谢谢!
答案 0 :(得分:0)
这是OP。我找到了解决方案。 1)在我的auth.js文件中,
Passport.authenticate('local-signup', err => {
替换' local-signup'与当地的' 所以它变成了:
Passport.authenticate('local', err => {
2)我碰巧有多个Passport策略,每个都在自己的文件中(一个用于登录,一个用于注册)。要使用正确的"本地"我必须在我的auth.js文件中导入正确的一个。很容易,它的
const passport = require('../Passport/local-signup');
对于登录,它将是一个不同的文件。