无法读取护照 .js 文件中未定义的 属性 'use'

Cannot read property 'use' of undefined, in the passport .js file

我创建了一个文件夹 config 并在其中创建了 passport.js 文件,当我尝试 运行 我的代码时,它包含所有配置护照模块 我得到了这个错误 TypeError: Cannot read property 'use' of undefined 引用这行代码 passport.use(new LocalStrategy(function(username, password, done) {

passport.js 文件:

    var express = require('express');
const LocalStrategy = require('passport-local').Strategy;
const User = require('../server/model/userModel');
const bcrypt = require('bcrypt');
var passport = require('passport');

module.exports = function(passport) {
    // Local Strategy
    passport.use(new LocalStrategy(function(username, password, done) {
        // Match Username
        let query = { username: username };
        User.findOne(query, function(err, user) {
            /*
            if (err) throw err;
            if (!user) {
                return done(null, false, { message: 'No user found' });
            }
            */
            if (err) { return done(err); }
            if (!user) {
                return done(null, false, { message: 'Incorrect username.' });
            }

            // Match Password
            bcrypt.compare(password, user.password, function(err, isMatch) {
                if (err) throw err;
                if (isMatch) {
                    return done(null, user);
                } else {
                    return done(null, false, { message: 'Wrong password' });
                }
            });


        });


    }));

    passport.serializeUser(function(user, done) {
        done(null, user.id);
    });


    passport.deserializeUser(function(id, done) {
        User.findById(id, function(err, user) {
            done(err, user);
        });
    });

}

你初始化了吗:

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

To use Passport in an Express or Connect-based application, configure it with the required passport.initialize() middleware. If your application uses persistent login sessions (recommended, but not required), passport.session() middleware must also be used.

passport.use(new LocalStrategy(
  function(username, password, done) {
    User.findOne({ username: username }, function (err, user) {
      if (err) { return done(err); }
      if (!user) { return done(null, false); }
      if (!user.verifyPassword(password)) { return done(null, false); }
      return done(null, user);
    });
  }
));

https://github.com/jaredhanson/passport

您对同一名称使用了两个不同的引用。

var passport = require('passport');

在这里,您定义了 passport 变量。

module.exports = function(passport) {

此处,您将参数名称定义为passport。在此上下文中使用 passport 将引用参数

passport.use(...

从定义的变量中调用参数的 use 方法而不是 passport.use 方法。考虑将函数参数名称更改为 passport, 以外的名称,或者 _passport?

module.exports = function(passport) {
//to
module.exports = function(_passport) {