【问题标题】:Creating a User and authenticating using passport.js创建用户并使用 passport.js 进行身份验证
【发布时间】: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


    【解决方案1】:

    您必须在此处指定名字和姓氏 var newUser = new User({ username: req.body.user.email, firstname: req.body.user.firstname, lastname:req.body.user.lastname});

    【讨论】:

      【解决方案2】:

      你必须指定不同的参数

      var newUser = new User({ username: req.body.user.email, 
                               firstName: req.body.user.firstName, 
                               lastName: req.body.user.lastName});
      

      【讨论】:

      • 好的,这有帮助。谢谢。
      猜你喜欢
      • 2023-04-03
      • 2018-05-03
      • 2023-04-05
      • 1970-01-01
      • 1970-01-01
      • 2019-04-28
      • 2018-10-21
      • 2013-11-02
      • 2015-08-28
      相关资源
      最近更新 更多