diff --git a/client/app/hooks/useUser.ts b/client/app/hooks/useUser.ts index a85d9bb..e181d8c 100644 --- a/client/app/hooks/useUser.ts +++ b/client/app/hooks/useUser.ts @@ -2,32 +2,36 @@ import { useEffect } from "react"; import { useAuth } from "./useAuth"; export const useUser = () => { - const { token, user, setUser } = useAuth(); - console.log(user); + const { token, user, setUser, logout } = useAuth(); useEffect(() => { const fetchUser = async () => { if (!token || user) return; try { + console.log("Fetching user with token:", token); const response = await fetch("http://localhost:3000/api/users/me", { headers: { Authorization: `Bearer ${token}`, }, }); - if (!response.ok) throw new Error("Failed to fetch user"); + if (!response.ok) { + const errorText = await response.text(); + throw new Error(`Failed to fetch user: ${errorText}`); + } const userData = await response.json(); + console.log("Fetched user data:", userData); setUser(userData); } catch (error) { console.error("Error fetching user:", error); - useAuth.getState().logout(); + logout(); } }; fetchUser(); - }, [token, user, setUser]); + }, [token, user, setUser, logout]); return user; }; diff --git a/server/src/modules/auth/auth.service.ts b/server/src/modules/auth/auth.service.ts index ec96af0..cd669c1 100644 --- a/server/src/modules/auth/auth.service.ts +++ b/server/src/modules/auth/auth.service.ts @@ -51,7 +51,13 @@ export class AuthService { } async login(loginDto: LoginDto) { - const payload = { email: loginDto.email, password: loginDto.password }; + const user = await this.validateUser(loginDto.email, loginDto.password); + const payload = { + email: loginDto.email, + password: loginDto.password, + sub: user.id, + role: user.role, + }; console.log(payload); return { access_token: this.jwtService.sign(payload), diff --git a/server/src/modules/auth/guards/jwt-auth.guard.ts b/server/src/modules/auth/guards/jwt-auth.guard.ts index 2155290..0ea4d98 100644 --- a/server/src/modules/auth/guards/jwt-auth.guard.ts +++ b/server/src/modules/auth/guards/jwt-auth.guard.ts @@ -1,5 +1,10 @@ -import { Injectable } from '@nestjs/common'; +import { Injectable, ExecutionContext } from '@nestjs/common'; import { AuthGuard } from '@nestjs/passport'; @Injectable() -export class JwtAuthGuard extends AuthGuard('jwt') {} +export class JwtAuthGuard extends AuthGuard('jwt') { + handleRequest(err, user, info, context: ExecutionContext) { + console.log('JWT Auth Guard:', { err, user, info }); + return super.handleRequest(err, user, info, context); + } +} diff --git a/server/src/modules/auth/strategies/jwt.strategy.ts b/server/src/modules/auth/strategies/jwt.strategy.ts index 7698526..b9d2a62 100644 --- a/server/src/modules/auth/strategies/jwt.strategy.ts +++ b/server/src/modules/auth/strategies/jwt.strategy.ts @@ -18,6 +18,7 @@ export class JwtStrategy extends PassportStrategy(Strategy) { } async validate(payload: any) { + console.log('payload', payload); const user = await this.prisma.user.findUnique({ where: { id: payload.sub }, select: { @@ -28,6 +29,7 @@ export class JwtStrategy extends PassportStrategy(Strategy) { role: true, }, }); + console.log('user found:', user); return user; } } diff --git a/server/src/modules/users/users.controller.ts b/server/src/modules/users/users.controller.ts index b26fced..1324e4e 100644 --- a/server/src/modules/users/users.controller.ts +++ b/server/src/modules/users/users.controller.ts @@ -37,8 +37,10 @@ export class UsersController { @Get('me') @UseGuards(JwtAuthGuard) async getProfile(@GetUser() user: User) { + console.log('Fetching profile for user:', user); const { password, ...userWithoutPassword } = await this.usersService.findById(user.id); + console.log('user profile', userWithoutPassword); return userWithoutPassword; }