-1
I am trying to log in my application with Passport but am encountering the following error: Referenceerror: Cannot access 'Passport' before initialization. At object. (C: Users Claudio Desktop new app.js:10:3
Here is the code of my app.js:
const express = require('express')
const mongoose = require('mongoose')
const path = require('path')
const flash = require('connect-flash')
const session = require('express-session')
const app = express()
//passport config
require('./config/passport')(passport)
//Database config
const database = require('./config/keys').MongoURI
const passport = require('./config/passport')
//Connect to mongo
mongoose.connect(database, {
useNewUrlParser: true, useUnifiedTopology: true, useCreateIndex: true
})
//Static File
app.use(express.static(path.join(__dirname, '/public')));
//Ejs
app.set('view engine', 'ejs')
//BodyParser
app.use(express.urlencoded({ extended: false }))
//express session
app.use(session({
secret: 'secret',
resave: true,
saveUninitialized: true,
}))
//passport middleware
app.use(passport.initialize());
app.use(passport.session());
//connect flash
app.use(flash())
//global variables
app.use((req, res, next) => {
res.locals.success_msg = req.flash('success_msg')
res.locals.error_msg = req.flash('error_msg')
next()
})
//Routes
app.use('/', require('./routes/index'))
app.use('/users', require('./routes/users'))
const PORT = process.env.PORT || 5000
app.listen(PORT, console.log(`Server started on port ${PORT}`))
Here is the config code of the Passport:
const LocalStrategy = require('passport-local').Strategy
const mongoose = require('mongoose')
const bcrypt = require('bcryptjs')
//load user model
const User = require('../models/User')
module.exports = function (passport) {
passport.use(
new LocalStrategy({ usernameField: 'email' }, (email, password, done) => {
//match user
User.findOne({ email })
.then(user => {
if (!user) {
return done(null, false, { message: 'Usuário ja cadastrado!' })
}
//match password
bcrypt.compare(password, user.password, (err, isMatch) => {
if (err) throw err
if (isMatch) {
return done(null, user)
} else {
return done(null, false, { message: 'Senha incorreta' })
}
})
})
.catch(err => console.log(err))
})
)
passport.serializeUser((user, done) => {
done(null, user.id);
});
passport.deserializeUser((id, done) => {
User.findById(id, (err, user) => {
done(err, user);
});
});
}
The error is quite clear, you are setting using Passport before require it
– Sorack