sub-manager-backend/config/passport.mjs

118 lines
2.8 KiB
JavaScript
Raw Normal View History

2024-05-23 10:55:11 +00:00
import bcrypt from "bcrypt";
import jwtSecret from "./jwtConfig";
const BCRYPT_SALT_ROUNDS = 12;
const passport = require("passport");
const LocalStrategy = require("passport-local").Strategy;
const JWTstrategy = require("passport-jwt").Strategy;
const ExtractJWT = require("passport-jwt").ExtractJwt;
const User = require("../sequelize");
passport.use(
"register",
new LocalStrategy(
{
usernameField: "username",
passwordField: "password",
passReqToCallback: true,
session: false,
},
(req, username, password, done) => {
try {
User.findOne({
where: {
[Op.or]: [
{
username,
},
{ email: req.body.email },
],
},
}).then((user) => {
if (user != null) {
console.log("username or email already taken");
return done(null, false, {
message: "username or email already taken",
});
}
bcrypt.hash(password, BCRYPT_SALT_ROUNDS).then((hashedPassword) => {
User.create({
username,
password: hashedPassword,
email: req.body.email,
}).then((user) => {
console.log("user created");
return done(null, user);
});
});
});
} catch (err) {
return done(err);
}
},
),
);
passport.use(
"login",
new LocalStrategy(
{
usernameField: "username",
passwordField: "password",
session: false,
},
(username, password, done) => {
try {
User.findOne({
where: {
username,
},
}).then((user) => {
if (user === null) {
return done(null, false, { message: "bad username" });
}
bcrypt.compare(password, user.password).then((response) => {
if (response !== true) {
console.log("passwords do not match");
return done(null, false, { message: "passwords do not match" });
}
console.log("user found & authenticated");
return done(null, user);
});
});
} catch (err) {
done(err);
}
},
),
);
const opts = {
jwtFromRequest: ExtractJWT.fromAuthHeaderWithScheme("JWT"),
secretOrKey: jwtSecret.secret,
};
passport.use(
"jwt",
new JWTstrategy(opts, (jwt_payload, done) => {
try {
User.findOne({
where: {
id: jwt_payload.id,
},
}).then((user) => {
if (user) {
console.log("user found in db in passport");
done(null, user);
} else {
console.log("user not found in db");
done(null, false);
}
});
} catch (err) {
done(err);
}
}),
);