Error: Unknown authentication strategy "local" while trying to signin

Error: Unknown authentication strategy "local" while trying to signin

我一直在根据教程构建这个项目。注册功能工作正常,但登录功能不起作用。每当我尝试使用邮递员登录注册用户时,我得到的错误是

Error: Unknown authentication strategy "local"

在stack overflow的其他帖子中,我没有找到解决这个错误的方法。 Passport、passport-local 和 passport-jwt 都已安装,所以这应该不是问题。如果能提供任何帮助,我将不胜感激。

passport.js

require('dotenv').config();
const passport = require('passport');
const LocalStrategy = require('passport-local').Strategy;
const JWTStrategy = require('passport-jwt').Strategy;
const User = require('./models/User');

// Environment variables
const STRATEGY_KEY = process.env.STRATEGY_KEY;

const cookieExtractor = req => {
    let token = null;

    // Retrieve the token from cookies
    if (req && req.cookies) {
        token = req.cookies['access_token'];
    }

    return token;
};

const jwtOptions = {
    jwtFromRequest: cookieExtractor,
    secretOrKey: STRATEGY_KEY,
};

// Authorization for protected routes
passport.use(
    new JWTStrategy(jwtOptions, (payload, done) => {
        User.findById({ _id: payload.sub }, (err, user) => {
            // Check for error
            if (err) return done(err, false);

            // Check if user exists
            if (user) return done(null, user);

            return done(null, false);
        });
    })
);

// Local strategy using username and password
passport.use(
    new LocalStrategy((username, password, done) => {
        User.findOne({ username }, (err, user) => {
            // Error while fetching the user from database
            if (err) return done(err);

            // No such user exists
            if (!user) return done(null, false);

            // Check if entered password matches
            user.comparePassword(password, done);
        });
    })
);

routes.js

require('dotenv').config();
const express = require('express');
const passport = require('passport');

const router = express.Router();     


const STRATEGY_KEY = process.env.STRATEGY_KEY;

const signToken = userID => {
    return jwt.sign(
        {
            iss: STRATEGY_KEY,
            sub: userID,
        },
        STRATEGY_KEY,
        {
            expiresIn: '1h',
        }
    );
};

router.post(
    '/signin',
    passport.authenticate('local', { session: false }),
    (req, res) => {
        if (req.isAuthenticated()) {
            const { _id, username, email } = req.user;
            const token = signToken(_id);
            res.cookie('access_token', token, {
                httpOnly: true,
                sameSite: true,
            });
            res.status(200).json({
                isAuthenticated: true,
                user: {
                    username,
                    email,
                },
            });
        }
    }
);

module.exports = router;

所以经过几个小时的调试,我发现这个问题的解决方案是我没有在 routes.js 文件中导入 passport.js 文件,这是我没想到的,因为导入保留在那里理想情况下什么都不做,不成为任何代码的一部分(exceot 导入)但我错了。我们在该文件中进行的护照配置是在幕后导入的,即使它不参与该文件的任何其他行。