fixes 500 error

This commit is contained in:
Gabriel Matte 2024-09-27 23:02:53 -04:00
parent 101fb2a767
commit 6a330774b3
2 changed files with 52 additions and 25 deletions

View file

@ -52,7 +52,12 @@ app.use('/api/image', imagesRouter);
// Add Auths methods
const session = require('express-session');
app.use(session({secret: process.env['SESSION_Secret']}));
app.use(session({
secret: process.env['SESSION_Secret'],
resave: false,
saveUninitialized: false,
cookie: { secure: process.env.NODE_ENV === 'production' }
}));
authManager = new AuthManager(app)
authManager.addModule('passport-js')

View file

@ -1,43 +1,65 @@
var OAuth2Strategy = require('passport-oauth2')
class PassportOAuth{
register(app,passport,name,provider){
class PassportOAuth {
register(app, passport, name, provider) {
passport.use(name, new OAuth2Strategy({
authorizationURL: provider.authorization_url,
tokenURL: provider.token_url,
clientID: provider.client_id,
clientSecret: provider.client_secret,
callbackURL: `http://localhost:4400/api/auth/gmatte/callback`,
},
async function(accessToken, refreshToken, params, profile, done) {
passReqToCallback: true
},
async function(req, accessToken, refreshToken, params, profile, done) {
try {
const req = await fetch(provider.userinfo_url,{
headers:{
Authorization:`Bearer ${accessToken}`
}
})
const userInfoResponse = await fetch(provider.userinfo_url, {
headers: { 'Authorization': `Bearer ${accessToken}` }
});
const userInfo = await userInfoResponse.json();
const data = await req.json()
profile = data
done(null,{accessToken,refreshToken,profile});
const user = {
id: userInfo.sub,
email: userInfo.email,
name: userInfo.name,
accessToken: accessToken,
refreshToken: refreshToken,
expiresIn: params.expires_in
};
// Store the tokens in the session
req.session.oauth2Tokens = {
accessToken: accessToken,
refreshToken: refreshToken,
expiresIn: params.expires_in
};
return done(null, user);
} catch (error) {
console.error(`Error in OAuth2 Strategy ${name} :`, error);
return done(error);
}
}
));
}));
app.use(`/api/auth/${name}`, passport.authenticate(name,{scope: provider.scopes.join(' ') ?? 'openid profile email'}));
app.use(`/api/auth/${name}/callback`,
passport.authenticate(name, {
successRedirect: '/',
failureRedirect: '/login',
session:false
}),
function(accessToken, refreshToken, params, profile, cb) {
console.log(params);
app.get(`/api/auth/${name}`, (req, res, next) => {
passport.authenticate(name, {
scope: provider.scopes.join(' ') ?? 'openid profile email offline_access',
prompt: 'consent'
})(req, res, next);
});
app.get(`/api/auth/${name}/callback`,
(req, res, next) => {
passport.authenticate(name, { failureRedirect: '/login' })(req, res, next);
},
(req, res) => {
if (req.user) {
res.json(req.user)
} else {
res.status(401).json({ error: 'Authentication failed' });
}
}
);
}
}
module.exports = PassportOAuth;