I need help, I am trying to make an application with PERN in which I want to do a login with passport and I am using sequelize for the postgres database
const express = require("express");
const cookieParser = require("cookie-parser");
const session = require("express-session");
const SessionStore = require("express-session-sequelize")(session.Store);
const passport = require("passport");
const LocalStrategy = require("passport-local");
const cors = require("cors");
const sequelize = require("./db").sequelize;
const User = require("./db").User;
const helpers = require("./helpers");
const app = express();
const sequelizeSessionStore = new SessionStore({
db: sequelize,
});
app.use(cookieParser());
app.use(
session({
secret: "secretCode",
store: sequelizeSessionStore,
resave: false,
saveUninitialized: false,
})
);
app.use(passport.initialize());
app.use(passport.session());
app.use(express.json());
app.use(
cors({
origin: "http://localhost:5173",
credentials: true,
})
);
passport.use(
"local-signup",
new LocalStrategy(
{
usernameField: "email",
passwordField: "password",
passReqToCallback: true,
},
async (req, email, password, done) => {
const user = await User.findOne({ where: { email: email } });
if (user) {
return done(null, false);
} else {
const newUser = new User();
newUser.email = email;
newUser.password = await helpers.encryptPassword(password);
await newUser.save();
done(null, newUser);
}
}
)
);
passport.use(
"local-signin",
new LocalStrategy(
{
usernameField: "email",
passwordField: "password",
passReqToCallback: true,
},
async (req, email, password, done) => {
const user = await User.findOne({ where: { email: email } });
if (!user) {
return done(null, false);
}
const validPassword = await helpers.matchPassword(
password,
user.password
);
if (!validPassword) {
return done(null, false);
}
return done(null, user);
}
)
);
passport.serializeUser((user, done) => {
done(null, user.id);
});
passport.deserializeUser(async (id, done) => {
const user = await User.findByPk(id);
done(null, user);
});
app.post("/signup", passport.authenticate("local-signup"), (req, res) => {
res.json(req.user);
});
app.get("/getUser", isAuthenticated, (req, res, next) => {
res.json(req.user);
});
app.post("/signin", passport.authenticate("local-signin"), (req, res) => {
res.json(req.sessionID);
});
app.get("/logout", (req, res, next) => {
req.logOut((err) => {
if (err) throw err;
res.json({ estado: "Desconectado" });
});
});
function isAuthenticated(req, res, next) {
if (req.isAuthenticated()) {
return next();
} else {
return res.json({ estado: "No estas conectado" });
}
}
try {
sequelize.sync({ force: false });
app.listen("3000");
console.log("Base de datos conectada, servidor en puerto 3000.");
} catch (error) {
console.error("Base de datos no disponible:", error);
}
it works for me so that I access through postman and do login, registration and I can obtain the user, but when I do it externally it is not possible to obtain the user even by sending the credentials from fetch and axios