TypeError:this.authenticate is not a function

TypeError:this.authenticate is not a function

在对注册路由的 post 请求中添加 passport.authenticate 后,出现此错误。根据教程,一切看起来都很好,但在添加这行代码后,即使是我的家庭路线也无法正常工作。有更新护照之类的吗?

这是我的 app.js:

require('dotenv').config();
const express=require("express");
const bodyParser=require("body-parser");
const ejs=require("ejs");
const mongoose=require("mongoose");
const session=require("express-session");
const passport=require("passport")
const passportLocalMongoose=require("passport-local-mongoose");

const app=express();
app.use(express.static("public"));
app.set('view engine','ejs');
app.use(bodyParser.urlencoded({extended:true}));
app.use(session({
  //js object with these properties
  secret:"our little secret",
  resave:false,
  saveUninitialized:false
}));
app.use(passport.initialize());
app.use(passport.session);

mongoose.connect("mongodb://localhost:27017/userDB",{useNewUrlParser:true, useUnifiedTopology: true,useCreateIndex:true});
//secure way to declare schema
const userSchema=new mongoose.Schema({
  email:String,
  password:String
});
//used to encrypt password basically this is the complete usage of encrypt package.also accessing environment variable

userSchema.plugin(passportLocalMongoose);

const User=new mongoose.model("User",userSchema);

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

app.get("/",function(req,res){
  res.render("home");
});
app.get("/login",function(req,res){
  res.render("login");
});
app.get("/register",function(req,res){
  res.render("register");
});
app.get("/secrets",function(req,res){
  if(req.isAuthenticated()){
    res.render("secrets");
  }else{
    res.redirect("/login")
  }
})
app.post("/register",function(req,res){
User.register({username:req.body.username},req.body.password,function(err,user){
  if(err){
    console.log(err);
    res.redirect("/register");
  }else{
    passport.authenticate("local")(req,res,function(){
      res.redirect("/secrets");
    })
  }
})
});
app.post("/login",function(req,res){

});

app.listen(3000,function(){
  console.log("server running at port 3000")
});

我相信您在 passport.session 方法调用中漏掉了一对括号。

试试 app.use(passport.session());