Enhanced user management in auth.js by ensuring user data is returned with expanded object IDs, updated user retrieval to use lean queries for performance, and added profile image support in user info response.
Some checks failed
farmcontrol/farmcontrol-api/pipeline/head There was a failure building this commit
Some checks failed
farmcontrol/farmcontrol-api/pipeline/head There was a failure building this commit
This commit is contained in:
parent
7c44f36590
commit
5f5eedc798
@ -13,6 +13,7 @@ import {
|
|||||||
updateSessionKeycloakTokens,
|
updateSessionKeycloakTokens,
|
||||||
deleteSession,
|
deleteSession,
|
||||||
} from './sessionStore.js';
|
} from './sessionStore.js';
|
||||||
|
import { expandObjectIds } from '../../utils.js';
|
||||||
|
|
||||||
const logger = log4js.getLogger('Auth');
|
const logger = log4js.getLogger('Auth');
|
||||||
logger.level = config.server.logLevel;
|
logger.level = config.server.logLevel;
|
||||||
@ -116,7 +117,7 @@ const fetchAndStoreUser = async (keycloakTokenData) => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const user = await createOrUpdateUser(userInfo);
|
const user = await createOrUpdateUser(userInfo);
|
||||||
return { ...userInfo, _id: user._id };
|
return { ...userInfo, ...user };
|
||||||
};
|
};
|
||||||
|
|
||||||
// Exchange auth code for tokens, create Redis session, return our session token to client
|
// Exchange auth code for tokens, create Redis session, return our session token to client
|
||||||
@ -244,7 +245,7 @@ export const loginCallbackRouteHandler = async (req, res, redirectType = 'web')
|
|||||||
const createOrUpdateUser = async (userInfo) => {
|
const createOrUpdateUser = async (userInfo) => {
|
||||||
try {
|
try {
|
||||||
const { username, email, name, firstName, lastName } = userInfo;
|
const { username, email, name, firstName, lastName } = userInfo;
|
||||||
const existingUser = await userModel.findOne({ username });
|
const existingUser = await userModel.findOne({ username }).lean();
|
||||||
|
|
||||||
if (existingUser) {
|
if (existingUser) {
|
||||||
const hasChanges =
|
const hasChanges =
|
||||||
@ -266,9 +267,10 @@ const createOrUpdateUser = async (userInfo) => {
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
return await userModel.findOne({ username });
|
return expandObjectIds(await userModel.findOne({ username }).lean());
|
||||||
}
|
}
|
||||||
return existingUser;
|
|
||||||
|
return expandObjectIds(existingUser);
|
||||||
}
|
}
|
||||||
|
|
||||||
const newUser = new userModel({
|
const newUser = new userModel({
|
||||||
@ -279,21 +281,21 @@ const createOrUpdateUser = async (userInfo) => {
|
|||||||
lastName,
|
lastName,
|
||||||
});
|
});
|
||||||
await newUser.save();
|
await newUser.save();
|
||||||
return newUser;
|
return expandObjectIds(newUser);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
logger.error('Error creating/updating user:', error);
|
logger.error('Error creating/updating user:', error);
|
||||||
throw error;
|
throw error;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
export const userRouteHandler = (req, res) => {
|
export const userRouteHandler = async (req, res) => {
|
||||||
if (req.user) {
|
if (req.user) {
|
||||||
const authHeader = req.headers.authorization || req.headers.Authorization;
|
const authHeader = req.headers.authorization || req.headers.Authorization;
|
||||||
const token = authHeader?.startsWith('Bearer ') ? authHeader.substring(7) : null;
|
const token = authHeader?.startsWith('Bearer ') ? authHeader.substring(7) : null;
|
||||||
return res.json({
|
return res.json({
|
||||||
access_token: token,
|
access_token: token,
|
||||||
expires_at: req.session?.expiresAt,
|
expires_at: req.session?.expiresAt,
|
||||||
user: req.user,
|
user,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
res.status(401).json({ error: 'Not authenticated' });
|
res.status(401).json({ error: 'Not authenticated' });
|
||||||
@ -371,6 +373,7 @@ export const getUserInfoHandler = (req, res) => {
|
|||||||
const userInfo = {
|
const userInfo = {
|
||||||
id: req.user._id,
|
id: req.user._id,
|
||||||
email: req.user.email,
|
email: req.user.email,
|
||||||
|
profileImage: req.user?.profileImage || null,
|
||||||
name: req.user.name || `${req.user.firstName || ''} ${req.user.lastName || ''}`.trim(),
|
name: req.user.name || `${req.user.firstName || ''} ${req.user.lastName || ''}`.trim(),
|
||||||
roles: req.user.roles || [],
|
roles: req.user.roles || [],
|
||||||
};
|
};
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user