I am trying to perform a user authentication using nodejs + sequelize + passport.js (passport-local) everything works great, the users are saved in the encrypted database, but when I want to obtain the data from the get / user route , it returns me undefined req.user, so I can't get the data, why is this? I thank you very much in advance
[config.js]
const Sequelize = require("sequelize");
require("dotenv").config();
const config = new Sequelize(process.env.DATABASE, "root", process.env.PASS, {
host: process.env.HOST,
port: process.env.PORTSQL,
logging: false,
dialect: "mysql",
define: {
timestamps: false,
},
pool: {
max: 5,
min: 0,
acquire: 30000,
idle: 10000,
},
operatorAliases: false,
});
config
.authenticate()
.then(() => {
console.log("DB SEQUELIZE CONNECTED");
})
.catch((err) => console.error(err));
module.exports = config;
[index.js]
require("dotenv").config();
const Server = require("./models/Server.js");
const server = new Server();
server.listener();
[models/Server.js]
require("dotenv").config();
require("../utils/config.js");
const express = require("express");
const cors = require("cors");
const morgan = require("morgan");
const movementsRouter = require("../routes/MovementsRouter.js");
const usersRouter = require("../routes/UsersRouter.js");
const session = require("express-session");
const path = require("path");
const passport = require("../utils/passport.js");
const Sequelize = require("../utils/config.js");
class Server {
constructor() {
this.app = express();
this.PORT = process.env.PORT || 8080;
this.settings();
this.middlewares();
this.routes();
}
settings() {
this.app.set("port", process.env.PORT || this.port);
}
middlewares() {
this.app.use(cors());
this.app.use(express.json());
this.app.use(express.urlencoded({ extended: true }));
this.app.use(
express.static(path.join(__dirname, "/front/build/index.html"))
);
this.app.use(morgan("dev"));
this.app.use(
session({
secret: process.env.MYSECRET,
resave: true,
saveUninitialized: true,
})
);
this.app.use(passport.initialize());
this.app.use(passport.session());
}
routes() {
this.app.use("/", movementsRouter);
this.app.use("", usersRouter);
}
listener() {
Sequelize.sync({ force: false }).then(() => {
this.app
.listen(this.app.get("port"), () => {
console.log(`Server on port ${this.app.get("port")}`);
})
.on("error", (err) => {
console.log(err);
});
});
}
}
module.exports = Server;
[passport.js]
let bcrypt = require("bcrypt-nodejs");
let passport = require("passport");
const { User } = require("../models/Users.js");
let LocalStrategy = require("passport-local").Strategy;
passport.use(
"local-signup",
new LocalStrategy(
{
usernameField: "email",
passwordField: "password",
passReqToCallback: true,
},
function (req, email, password, done) {
console.log("Signup for - ", email);
let generateHash = function (password) {
return bcrypt.hashSync(password, bcrypt.genSaltSync(8), null);
};
User.findOne({
where: {
email: email,
},
}).then(function (user) {
if (user) {
return done(null, false, {
message: "That email is already taken",
});
} else {
let userPassword = generateHash(password);
let data = {
email: email,
password: userPassword,
naming: req.body.naming,
};
User.create(data).then(function (newUser, created) {
if (!newUser) {
return done(null, false);
}
if (newUser) {
return done(null, newUser);
}
});
}
});
}
)
);
//LOCAL SIGNIN
passport.use(
"local-signin",
new LocalStrategy(
{
usernameField: "email",
passwordField: "password",
passReqToCallback: true,
},
function (req, email, password, done) {
let isValidPassword = function (userpass, password) {
return bcrypt.compareSync(password, userpass);
};
console.log("logged to", email);
User.findOne({
where: {
email: email,
},
})
.then(function (user) {
console.log(user);
if (!user) {
return done(null, false, {
message: "Email does not exist",
});
}
if (!isValidPassword(user.password, password)) {
return done(null, false, {
message: "Incorrect password.",
});
}
let userinfo = user.get();
return done(null, userinfo);
})
.catch(function (err) {
console.log("Error:", err);
return done(null, false, {
message: "Something went wrong with your Signin",
});
});
}
)
);
passport.serializeUser(function (user, done) {
done(null, user.id);
});
passport.deserializeUser(function (id, done) {
User.findById(id).then(function (user) {
console.log(user + "ASDASDASDASDAS");
if (user) {
done(null, user.get());
} else {
done(user.errors, null);
}
});
});
module.exports = passport;
[models/Users]
const sequelize = require("sequelize");
const config = require("../utils/config.js");
const User = config.define("users", {
id: {
type: sequelize.INTEGER,
primaryKey: true,
autoIncrement: true,
allowNull: false,
},
naming: {
type: sequelize.STRING,
allowNull: false,
},
email: {
type: sequelize.STRING,
allowNull: false,
},
password: {
type: sequelize.STRING,
allowNull: false,
},
});
module.exports = {
User,
};
[UsersRouter.js]
const express = require("express");
const router = express();
const passport = require("../utils/passport.js");
const { User } = require("../models/Users.js");
router.post("/register", (req, res) => {
passport.authenticate("local-signup", function (error, user, info) {
if (error) {
return res.status(500).json({
message: error || "Something happend",
error: error.message || "Server error",
});
}
req.logIn(user, function (error, data) {
if (error) {
return res.status(500).json({
message: error || "Something happend",
error: error.message || "Server error",
});
}
return res.json(user);
});
})(req, res);
});
router.post("/login", function (req, res) {
passport.authenticate("local-signin", function (error, user, info) {
if (error) {
return res.status(500).json({
message: error || "Something happend",
error: error.message || "Server error",
});
}
req.logIn(user, function (error, data) {
if (error) {
return res.status(500).json({
message: error || "Something happend",
error: error.message || "Server error",
});
}
user.isAuthenticated = true;
return res.json(user);
});
})(req, res);
});
// route for get user data
router.get("/user", (req, res) => {
console.log(req.user);
if (req.user) {
return res.json(req.user);
} else {
return res.status(401).json({
message: "Unauthorized",
});
}
});
router.get("/logout", (req, res) => {
req.logout((err) => {
if (err) {
logger.error(err);
}
res.redirect("/");
});
});
module.exports = router;