tokens refresh when jwt is expired and added basic axios config

This commit is contained in:
Kai Ritthaler 2025-06-25 07:56:30 +02:00 committed by Luisa Bellitto
parent 36366d8814
commit dc02a2ae52
15 changed files with 470 additions and 289 deletions

View file

@ -173,7 +173,7 @@ export const loginUser = async (req: Request, res: Response) => {
// Endpoint to get user data
export const getUser = async (req: Request, res: Response) => {
const username: string = req.query.username as string;
const username: string = req.params.username as string;
if (!username) {
res.status(StatusCodes.BAD_REQUEST).json({
error: "no username",
@ -197,9 +197,8 @@ export const getUser = async (req: Request, res: Response) => {
message: "User found",
data: {
username: user.username,
email: user.email,
userId: user.id,
userInfo: user.bio,
bio: user.bio,
},
});
};
@ -255,9 +254,15 @@ export const refreshToken = async (req: Request, res: Response) => {
});
return;
}
await prisma.refreshToken.delete({
const existingToken = await prisma.refreshToken.findUnique({
where: { id: payload.jti },
});
if (existingToken) {
await prisma.refreshToken.deleteMany({
where: { id: payload.jti },
});
}
const refreshToken = await generateRefreshToken(storedToken.user.id);
res.set("Refresh-Token", refreshToken.token);
const token: string = generateAccessToken(
@ -268,7 +273,8 @@ export const refreshToken = async (req: Request, res: Response) => {
); // generate a JWT token with the username and userId as payload
res.set("Authorization", `Bearer ${token}`); // set the token in the response header
res.status(StatusCodes.OK).send();
} catch {
} catch (error) {
console.log(error);
res.status(StatusCodes.INTERNAL_SERVER_ERROR).json({
error: "Server error",
details: [{ message: "Server Error" }],
@ -280,13 +286,15 @@ export const refreshToken = async (req: Request, res: Response) => {
};
export const logout = async (req: Request, res: Response) => {
const jti: string = req.query.jti as string;
const jti: string = req.user!.jti as string;
try {
await prisma.refreshToken.delete({ where: { id: jti } });
res.removeHeader("Authorization");
res.removeHeader("Refresh-Token");
res.status(StatusCodes.NO_CONTENT).send();
} catch {
res.status(StatusCodes.INTERNAL_SERVER_ERROR);
} catch (err) {
console.log(err);
res.status(StatusCodes.INTERNAL_SERVER_ERROR).json({
error: "Server error",
details: [{ message: "Server Error" }],
});
}
};