【发布时间】:2018-01-17 23:51:23
【问题描述】:
我正在尝试保存用户并同时注册它。我在同时做这两件事时遇到了麻烦。
我当前的架构:
const userSchema = new mongoose.Schema({
username: String,
password: String,
firstName: String,
lastName: String,
player: {
type: Boolean,
default: true
}
});
userSchema.plugin(passportLocalMongoose);
module.exports = (User, "userSchema");
我现在的表格:
<form action="/player" method="POST">
<input type="text" name="user[username]" placeholder="username">
<input type="password" name ="user[password]" placeholder="password">
<input type="text" name="user[firstName]" placeholder="First Name">
<input type="text" name="user[lastName]" placeholder="Last Name">
<button>Submit</button>
</form>
我需要 express、passport、passport-local、passport-local-mongoose、body-parser、mongoose 和我的模式。
之后我的 app.js 是:
mongoose.connect(database);
app.use(bodyParser.urlencoded({extended: true}));
app.use(require("express-session")({
secret: "Generic Secret Password",
resave: false,
saveUninitialized: false
}));
app.use(passport.initialize());
app.use(passport.session());
passport.use(new LocalStrategy(User.authenticate()));
passport.serializeUser(User.serialUser());
passport.deserializeUser(User.deserializeUser());
//route
app.post("/player", function(req, res){
var newUser = new User({ username: req.body.user.email });
User.register(newUser, req.body.user.password, function(err, user){
if(err){
console.log(err);
return res.render("new");
}
passport.authenticate("local")(req, res, function(){
res.redirect("/player");
});
});
我遇到的问题是,当我提交时,用户保存了 salt、hash、用户名,并将播放器设置为“true”,但它不保存 lastName 或 firstName,并且随后出现错误请求(400 )。我可以做一个 User.Create 并保存所有内容(减去哈希和盐)并很好地重定向。我还可以设置表单,使“user[username]”和“user[password]”是“username”和“password”,并让它保存除 firstName 和 lastName 之外的所有内容,并且它将正确重定向而不会出现 400 状态。我尝试更改“usernameField”和“passwordField”的默认输入,但我没有运气。我试图查看各种 SO 帖子,我发现最接近的是更改默认值的类似建议,所以也许我做错了。我也尝试过重定向到不同的路线,但仍然没有运气。
这是我从事的第一个不是代码的项目,我试图在每件事上都尽可能具体,并且我已经努力了整整八个小时。感谢您的帮助!
【问题讨论】:
标签: node.js mongoose passport.js