auth fixed

This commit is contained in:
dimitar 2024-12-13 11:00:04 +01:00
parent 787aa97f50
commit a42c875b2c
5 changed files with 27 additions and 8 deletions

View File

@ -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;
};

View File

@ -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),

View File

@ -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);
}
}

View File

@ -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;
}
}

View File

@ -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;
}