FIX error on user model not being init

This commit is contained in:
Eddi3_As 2025-03-02 17:57:49 -05:00
parent a049ba5da1
commit 44c023e023
6 changed files with 26 additions and 22 deletions

View file

@ -12,7 +12,7 @@ const Register: React.FC = () => {
const [name, setName] = useState(''); // State for name const [name, setName] = useState(''); // State for name
const [email, setEmail] = useState(''); const [email, setEmail] = useState('');
const [password, setPassword] = useState(''); const [password, setPassword] = useState('');
const [roles, setRoles] = useState<string[]>(['student']); // Set 'student' as the default role const [roles, setRoles] = useState<string[]>(['teacher']); // Set 'student' as the default role
const [connectionError, setConnectionError] = useState<string>(''); const [connectionError, setConnectionError] = useState<string>('');
const [isConnecting] = useState<boolean>(false); const [isConnecting] = useState<boolean>(false);

View file

@ -41,7 +41,7 @@ class AuthManager{
async registerAuths(){ async registerAuths(){
for(const module of this.modules){ for(const module of this.modules){
try{ try{
module.registerAuth(this.app) module.registerAuth(this.app, this.simpleregister);
} catch(error){ } catch(error){
console.error(`L'enregistrement du module ${module} a échoué.`); console.error(`L'enregistrement du module ${module} a échoué.`);
console.error(`Error: ${error} `); console.error(`Error: ${error} `);
@ -50,8 +50,14 @@ class AuthManager{
} }
// eslint-disable-next-line no-unused-vars // eslint-disable-next-line no-unused-vars
async login(email,pswd,req,res,next){ //passport and simpleauth use next async login(userInfo,req,res,next){ //passport and simpleauth use next
const tokenToSave = jwt.create(userInfo.email, userInfo._id,userInfo.roles);
res.redirect(`/auth/callback?user=${tokenToSave}&username=${userInfo.name}`);
console.info(`L'utilisateur '${userInfo.name}' vient de se connecter`)
}
// eslint-disable-next-line no-unused-vars
async loginSimple(email,pswd,req,res,next){ //passport and simpleauth use next
const userInfo = await this.simpleregister.login(email, pswd); const userInfo = await this.simpleregister.login(email, pswd);
const tokenToSave = jwt.create(userInfo.email, userInfo._id,userInfo.roles); const tokenToSave = jwt.create(userInfo.email, userInfo._id,userInfo.roles);
res.redirect(`/auth/callback?user=${tokenToSave}&username=${userInfo.name}`); res.redirect(`/auth/callback?user=${tokenToSave}&username=${userInfo.name}`);

View file

@ -1,6 +1,5 @@
var OAuth2Strategy = require('passport-oauth2') var OAuth2Strategy = require('passport-oauth2')
var authUserAssoc = require('../../../models/authUserAssociation') var authUserAssoc = require('../../../models/authUserAssociation')
var users = require('../../../models/users')
var { hasNestedValue } = require('../../../utils') var { hasNestedValue } = require('../../../utils')
class PassportOAuth { class PassportOAuth {
@ -9,8 +8,8 @@ class PassportOAuth {
this.auth_name = auth_name this.auth_name = auth_name
} }
register(app, passport, endpoint, name, provider) { register(app, passport, endpoint, name, provider, userModel) {
const cb_url = `${process.env['BACKEND_URL']}${endpoint}/${name}/callback` const cb_url = `${process.env['OIDC_URL']}${endpoint}/${name}/callback`
const self = this const self = this
const scope = 'openid profile email offline_access' + ` ${provider.OAUTH_ADD_SCOPE}`; const scope = 'openid profile email offline_access' + ` ${provider.OAUTH_ADD_SCOPE}`;
@ -43,14 +42,14 @@ class PassportOAuth {
let user_account let user_account
if (user_association) { if (user_association) {
user_account = await users.getById(user_association.user_id) user_account = await userModel.getById(user_association.user_id)
} }
else { else {
let user_id = await users.getId(received_user.email) let user_id = await userModel.getId(received_user.email)
if (user_id) { if (user_id) {
user_account = await users.getById(user_id); user_account = await userModel.getById(user_id);
} else { } else {
received_user.password = users.generatePassword() received_user.password = userModel.generatePassword()
user_account = await self.passportjs.register(received_user) user_account = await self.passportjs.register(received_user)
} }
await authUserAssoc.link(self.auth_name, received_user.auth_id, user_account._id) await authUserAssoc.link(self.auth_name, received_user.auth_id, user_account._id)
@ -58,7 +57,7 @@ class PassportOAuth {
user_account.name = received_user.name user_account.name = received_user.name
user_account.roles = received_user.roles user_account.roles = received_user.roles
await users.editUser(user_account) await userModel.editUser(user_account)
// Store the tokens in the session // Store the tokens in the session
req.session.oauth2Tokens = { req.session.oauth2Tokens = {

View file

@ -1,6 +1,5 @@
var OpenIDConnectStrategy = require('passport-openidconnect'); var OpenIDConnectStrategy = require('passport-openidconnect');
var authUserAssoc = require('../../../models/authUserAssociation'); var authUserAssoc = require('../../../models/authUserAssociation');
var users = require('../../../models/users');
var { hasNestedValue } = require('../../../utils'); var { hasNestedValue } = require('../../../utils');
const { MISSING_OIDC_PARAMETER } = require('../../../constants/errorCodes.js'); const { MISSING_OIDC_PARAMETER } = require('../../../constants/errorCodes.js');
const AppError = require('../../../middleware/AppError.js'); const AppError = require('../../../middleware/AppError.js');
@ -22,7 +21,7 @@ class PassportOpenIDConnect {
} }
} }
async register(app, passport, endpoint, name, provider) { async register(app, passport, endpoint, name, provider, userModel) {
const config = await this.getConfigFromConfigURL(name, provider); const config = await this.getConfigFromConfigURL(name, provider);
const cb_url = `${process.env['OIDC_URL']}${endpoint}/${name}/callback`; const cb_url = `${process.env['OIDC_URL']}${endpoint}/${name}/callback`;
@ -62,14 +61,14 @@ class PassportOpenIDConnect {
let user_account let user_account
if (user_association) { if (user_association) {
user_account = await users.getById(user_association.user_id) user_account = await userModel.getById(user_association.user_id)
} }
else { else {
let user_id = await users.getId(received_user.email) let user_id = await userModel.getId(received_user.email)
if (user_id) { if (user_id) {
user_account = await users.getById(user_id); user_account = await userModel.getById(user_id);
} else { } else {
received_user.password = users.generatePassword() received_user.password = userModel.generatePassword()
user_account = await self.passportjs.register(received_user) user_account = await self.passportjs.register(received_user)
} }
await authUserAssoc.link(self.auth_name, received_user.auth_id, user_account._id) await authUserAssoc.link(self.auth_name, received_user.auth_id, user_account._id)
@ -77,7 +76,7 @@ class PassportOpenIDConnect {
user_account.name = received_user.name user_account.name = received_user.name
user_account.roles = received_user.roles user_account.roles = received_user.roles
await users.editUser(user_account); await userModel.editUser(user_account);
return done(null, user_account); return done(null, user_account);
} catch (error) { } catch (error) {

View file

@ -9,7 +9,7 @@ class PassportJs{
this.endpoint = "/api/auth" this.endpoint = "/api/auth"
} }
async registerAuth(expressapp){ async registerAuth(expressapp, userModel){
expressapp.use(passport.initialize()); expressapp.use(passport.initialize());
expressapp.use(passport.session()); expressapp.use(passport.session());
@ -21,7 +21,7 @@ class PassportJs{
this.registerProvider(provider.type,auth_id) this.registerProvider(provider.type,auth_id)
} }
try{ try{
this.registeredProviders[provider.type].register(expressapp,passport,this.endpoint,name,provider) this.registeredProviders[provider.type].register(expressapp,passport,this.endpoint,name,provider,userModel)
authprovider.create(auth_id) authprovider.create(auth_id)
} catch(error){ } catch(error){
console.error(`La connexion ${name} de type ${provider.type} n'as pu être chargé.`); console.error(`La connexion ${name} de type ${provider.type} n'as pu être chargé.`);

View file

@ -53,7 +53,7 @@ class SimpleAuth {
throw error; throw error;
} }
await self.authmanager.login(email, password, req, res, next); await self.authmanager.loginSimple(email, password, req, res, next);
} catch (error) { } catch (error) {
const statusCode = error.statusCode || 500; const statusCode = error.statusCode || 500;
const message = error.message || "An internal server error occurred"; const message = error.message || "An internal server error occurred";