首页 > 解决方案 > Node.js mongoose User.register 使页面保持挂起

问题描述

这是我的 app.js

var express               = require("express")
var User                  = require("./models/user");
var bodyParser            = require("body-parser");
var mongoose              = require("mongoose");
var passport              = require("passport");
var passportStrategy      = require("passport-local");
var passportLocalMongoose = require("passport-local-mongoose");



//mongo db
mongoose.connect("mongodb://localhost/auth_demo_app");



var app = express();
app.set('view engine', 'ejs');
app.use(bodyParser.urlencoded({extended: true }));
app.use(require("express-session")({
  secret: "Rusty",
  resave: false,
  saveUninitialized: false
}));

app.use(passport.initialize());
app.use(passport.session());
passport.serializeUser(User.serializeUser());
passport.deserializeUser(User.deserializeUser());


//ROUTS
app.get("/", function(req,res) {
  res.render("home");
});

app.get("/secret", function(req,res) {
  res.render("secret");
});

//Auth Routhes
//show the form
app.get("/register", function(req,res) {
  res.render("register");
});


app.post("/register", function(req,res) {
  req.body.username
  req.body.password
  User.register(new User({username: req.body.username}), req.body.password, function(err, user) {
    if(err) {
      console.log(err);
      return res.render('register');
    }
    passport.authenticate("local")(req, res, function(){
        res.redirect("/secret");
    });
  });
});



//this is the locall host
app.listen(3002, function(){
  console.log("Server on port 3002")
});

这是用户模型 user.js

var mongoose = require("mongoose");
var passportLocalMongoose = require("passport-local-mongoose");

var UserSchema = new mongoose.Schema({
    username: String,
    password: String
});

UserSchema.plugin(passportLocalMongoose)

module.exports = mongoose.model("User", UserSchema);

有人可以帮我找出为什么我的页面一直处于待处理状态的问题,因为我没有发现代码有任何问题,只是User.register的行有 问题。看起来它不能进入​​这个方法,但我仍然不确定为什么如果你发现错误会很好。

因为每次我查看stackoverflow时,我都会看到人们忘记像我一样放置用户模型。但这种情况并非如此

标签: node.jsexpressmongoosepassport.js

解决方案


您需要添加此行:

passport.use(User.createStrategy());

在上面添加:

passport.serializeUser(User.serializeUser());
passport.deserializeUser(User.deserializeUser());

这样做,您的代码将是:

var express               = require("express")
var User                  = require("./models/user");
var bodyParser            = require("body-parser");
var mongoose              `enter code here`= require("mongoose");
var passport              = require("passport");
var passportStrategy      = require("passport-local");
var passportLocalMongoose = require("passport-local-mongoose");



//mongo db
mongoose.connect("mongodb://localhost/auth_demo_app");



var app = express();
app.set('view engine', 'ejs');
app.use(bodyParser.urlencoded({extended: true }));
app.use(require("express-session")({
  secret: "Rusty",
  resave: false,
  saveUninitialized: false
}));

app.use(passport.initialize());
app.use(passport.session());
passport.use(User.createStrategy);
passport.serializeUser(User.serializeUser());
passport.deserializeUser(User.deserializeUser());



 

推荐阅读