passportjs TypeError:User.authenticate不是函数

时间:2018-02-10 19:21:48

标签: express mongoose passport.js typeerror passport-local

我正在尝试使用本地护照和本地护照-mongoose构建一个小nodejs,express,mongodb app,但是出于某种原因,在主app.js文件中输入护照的中间件我得到此错误" TypeError:User.authenticate不是函数"

我在测试项目中尝试了自己的身份验证,它运行得很好,所以也许它与我的代码顺序有关但我无法解决导致问题的原因这个问题。我尝试了几个重构但无济于事。

以下是app.js和用户架构的代码,但Here's是项目文件的链接(如果需要)。

非常感谢任何帮助人员,非常感谢。

app.js

const express = require('express'),
  app = express(),
  path = require('path'),
  exphbs = require('express-handlebars'),
  methodOverride = require('method-override'),
  flash = require('connect-flash'),
  session = require('express-session'),
  bodyParser = require('body-parser'),
  mongoose = require('mongoose'),
  LocalStrategy = require("passport-local"),
  passport = require("passport"),
  mongodb = require("mongodb"),
  User = require("./models/User");

// Load routes
const ideas = require('./routes/ideas');
const users = require('./routes/users');

// Connect to mongoose
mongoose.connect('mongodb://localhost/diaries');
mongoose.Promise = Promise;

// Handlebars Middleware
app.engine('handlebars', exphbs({
  defaultLayout: 'main'
}));
app.set('view engine', 'handlebars');

// Body parser middleware
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());

// Static folder
app.use(express.static(path.join(__dirname, 'public')));

// Method override middleware
app.use(methodOverride('_method'));

// Express session midleware
//PASSPORT CONFIGURATION
app.use(require("express-session")({
  secret: "secret",
  resave: false,
  saveUninitialized: false
}));
app.use(passport.initialize());
app.use(passport.session());
passport.use(new LocalStrategy(User.authenticate()));
passport.serializeUser(User.serializeUser());
passport.deserializeUser(User.deserializeUser());

app.use(flash());

// Global variables
app.use(function(req, res, next) {
  res.locals.success_msg = req.flash('success_msg');
  res.locals.error_msg = req.flash('error_msg');
  res.locals.error = req.flash('error');
  next();
});

// Index Route
app.get('/', (req, res) => {
  const title = 'Welcome';
  res.render('index', {
    title: title
  });
});

// About Route
app.get('/about', (req, res) => {
  res.render('about');
});


// Use routes
app.use('/ideas', ideas);
app.use('/users', users);

const port = process.env.PORT;

app.listen(port, () => {
  console.log(`Server started on port ${port}`);
});

用户架构

const mongoose = require('mongoose');
const Schema = mongoose.Schema;
const passportLocalMongoose = require("passport-local-mongoose");

// Create Schema
const UserSchema = new Schema({
  name:{
    type: String,
    required: true
  },
  email:{
    type: String,
    required: true
  },
  password:{
    type: String,
    required: true
  },
  date: {
    type: Date,
    default: Date.now
  }
});
UserSchema.plugin(passportLocalMongoose, {usernameField: "email"});
mongoose.model('users', UserSchema);

1 个答案:

答案 0 :(得分:0)

尝试从LocalStrategy

导入require('passport-local').Strategy

const LocalStrategy = require('passport-local').Strategy