Fix user dashboard data display issue
Build And Push Image / docker (push) Successful in 3m15s Details

- Enhanced session endpoint to fetch complete member data from database
- Added getMemberByKeycloakId function to nocodb utils for member lookup by Keycloak ID
- Session endpoint now returns both user authentication data and complete member profile
- User dashboard will now display proper member information instead of 'Not provided'
- Handles cases where member record might not exist gracefully
This commit is contained in:
Matt 2025-08-11 16:54:14 +02:00
parent 6e68e42f28
commit a555584b2c
2 changed files with 56 additions and 0 deletions

View File

@ -16,6 +16,7 @@ export default defineEventHandler(async (event) => {
authenticated: false, authenticated: false,
user: null, user: null,
groups: [], groups: [],
member: null
}; };
} }
@ -31,10 +32,34 @@ export default defineEventHandler(async (event) => {
username: session.user.username username: session.user.username
}); });
// Fetch complete member data from database
let memberData = null;
try {
console.log('🔍 Fetching member data for Keycloak ID:', session.user.id);
const { getMemberByKeycloakId } = await import('~/server/utils/nocodb');
memberData = await getMemberByKeycloakId(session.user.id);
if (memberData) {
console.log('✅ Member data found:', {
memberId: memberData.member_id,
email: memberData.email,
name: `${memberData.first_name} ${memberData.last_name}`,
duesStatus: memberData.current_year_dues_paid
});
} else {
console.log('⚠️ No member record found for Keycloak ID:', session.user.id);
}
} catch (memberError) {
console.error('❌ Failed to fetch member data:', memberError);
// Continue without member data - user can still access basic features
}
return { return {
success: true,
authenticated: true, authenticated: true,
user: session.user, user: session.user,
groups: session.user.groups || [], groups: session.user.groups || [],
member: memberData
}; };
} catch (error) { } catch (error) {
console.error('❌ Session check error:', error); console.error('❌ Session check error:', error);
@ -42,6 +67,7 @@ export default defineEventHandler(async (event) => {
authenticated: false, authenticated: false,
user: null, user: null,
groups: [], groups: [],
member: null
}; };
} }
}); });

View File

@ -294,6 +294,36 @@ export const getMemberById = async (id: string): Promise<Member> => {
return result; return result;
}; };
export const getMemberByKeycloakId = async (keycloakId: string): Promise<Member | null> => {
console.log('[nocodb.getMemberByKeycloakId] Searching for member with Keycloak ID:', keycloakId);
try {
// Use the where parameter to search by keycloak_id
const result = await $fetch<EntityResponse<Member>>(createTableUrl(Table.Members), {
headers: {
"xc-token": getNocoDbConfiguration().token,
},
params: {
where: `(keycloak_id,eq,${keycloakId})`,
limit: 1,
},
});
if (result.list && result.list.length > 0) {
const member = normalizeFieldsFromNocoDB(result.list[0]);
console.log('[nocodb.getMemberByKeycloakId] Found member:', member.member_id || member.Id);
return member;
}
console.log('[nocodb.getMemberByKeycloakId] No member found with Keycloak ID:', keycloakId);
return null;
} catch (error: any) {
console.error('[nocodb.getMemberByKeycloakId] Error searching for member:', error);
// Return null instead of throwing to allow graceful handling
return null;
}
};
export const createMember = async (data: Partial<Member>): Promise<Member> => { export const createMember = async (data: Partial<Member>): Promise<Member> => {
console.log('[nocodb.createMember] Creating member with fields:', Object.keys(data)); console.log('[nocodb.createMember] Creating member with fields:', Object.keys(data));