node.js上的passport模块-引用错误:LocalStrategy未定义

sycxhyv7  于 2023-05-22  发布在  Node.js
关注(0)|答案(3)|浏览(108)

当我尝试运行我的代码时,它给了我引用错误:LocalStrategy未定义。
这是我第一次使用node.js,我用它碰壁了。我很感激你的帮助。
我把所有的代码放在一个片段中,这样你就可以很容易地浏览它。我尝试过其他帖子进行修复,但都没有成功。

/***********
   Modules
***********/

//Load the express library
var express = require('express');
//Create a new variable called “app”; we pass on the express() method.
var app = express();
//Set Port
var port = 7878;
var mongoose = require('mongoose'); //Place this on top; Loads mongoose library
var bodyParser = require('body-parser');
var passport = require('passport');
var LocalStratgy = require('passport-local').Strategy;

/*Body parser*///whenever you do a post request from the form, it gets the data through a URL encoded format.
app.use(bodyParser.urlencoded({
    extended: true
}));
app.use('/js', express.static(__dirname + '/js'));

/*Initialize Passport*/
app.use(passport.initialize());
app.use(passport.session());

/***********
  Database
***********/

/*Database connection - MongoDB*/

//Created from the command earlier. Ensure this is done on the first_db instance
var usr = 'admin';
var pwd = '123456';

var dbHost = 'localhost';
var dbPort = '27017';
var database = 'first_db';

var url = 'mongodb://' + usr + ':' + pwd + '@' + dbHost + ':' + dbPort + '/' + database;
console.log('mongodb connection = ' + url);

mongoose.connect(url, function(err) {
    if(err) {
        console.log('connection error: ', err);
    } else {
        console.log('connection successful');
    }
});

/***********
   Models
***********/

//User model
//Define our fields for the table
var UserSchema = new mongoose.Schema({
     user_id: mongoose.Schema.ObjectId,
     username: String,
     password: String
   });
//Create model object
var User = mongoose.model('user', UserSchema);


/***********
   Routes
***********/
var bcrypt = require('bcrypt-nodejs'); //should be placed on top
//Renders our html file
app.get('/', function (req, res, next) {
  res.sendFile( __dirname + '/index.html');
});
//render register.html when /register is called
app.get('/register', function (req, res, next) {
  res.sendFile( __dirname + '/register.html');
});

app.get('/home', function (req, res, next) {
    res.sendFile(__dirname + '/home.html');
});

app.post('/login', passport.authenticate('local'),
    function(req, res) {
        res.redirect('/home');
});

/* Login logic for passport.authenticate*/
passport.use(new LocalStrategy(
    function(username, password, done) {
        User.findOne({ username: username }, function (err, user) {
            if(user !== null) {
                var isPasswordCorrect = bcrypt.compareSync(password, user.password);
                if(isPasswordCorrect) {
                    console.log("Username and password correct!");
                    return done(null, user);
                } else {
                    console.log("Password incorrect!");
                    return done(null, false);
                }
           } else {
               console.log("Username does not exist!");
               return done(null, false);
           }
       });
    }
));

/**********
Serialize and Deserialize here for passport.authenticate
**********/
passport.serializeUser(function(user, done) {
    done(null, user);
});

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

app.post('/register', function (req, res, next) {
    var password = bcrypt.hashSync(req.body.password);
    req.body.password = password;

    User.create(req.body, function(err, saved) {
        if(err) {
            console.log(err);
            res.json({ message : err });
        } else {
            res.json({ message : "User successfully registered!"});
        }
    });
});

app.listen(port, '0.0.0.0', function() {
 console.log('Server running at port ' + port);
});
mm5n2pyu

mm5n2pyu1#

原因是你定义了var LocalStratgy,而不是LocalStrate。

hivapdat

hivapdat2#

你是这样使用它的-https://www.npmjs.com/package/passport-local-mongoose#configure-passportpassport-local

// use static authenticate method of model in LocalStrategy
passport.use(new LocalStrategy(User.authenticate()));

// use static serialize and deserialize of model for passport session support
passport.serializeUser(User.serializeUser());
passport.deserializeUser(User.deserializeUser());

但我建议你这样使用它-https://www.npmjs.com/package/passport-local-mongoose#simplified-passportpassport-local-configuration

// CHANGE: USE "createStrategy" INSTEAD OF "authenticate"
passport.use(User.createStrategy());

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

eqoofvh93#

通过运行以下命令,确保已安装passport和passport-local包:
npm install passport-local
然后,在代码中导入必要的依赖项,如下所示:
const passport = require('passport'); const LocalStrategy = require('passport-local').Strategy;
//其他代码passport.use(new LocalStrategy(User.authenticate()));

相关问题