From 616a43dba9a0dff674b60143f41b0bb25fed0e6e Mon Sep 17 00:00:00 2001 From: Benjamin Sherriff Date: Wed, 18 Oct 2023 21:37:59 -0400 Subject: [PATCH] Fixed refresh missing email issue --- service/src/auth/model.rs | 4 ++-- service/src/auth/routes.rs | 25 +++++++++---------------- ui/src/api/auth.ts | 12 ++++++------ ui/src/api/auth.types.ts | 2 +- ui/src/components/Topbar/index.tsx | 10 ++++++++-- 5 files changed, 26 insertions(+), 27 deletions(-) diff --git a/service/src/auth/model.rs b/service/src/auth/model.rs index 47f06ec..641ff93 100644 --- a/service/src/auth/model.rs +++ b/service/src/auth/model.rs @@ -152,7 +152,7 @@ impl FromRequest for JwtAuth { Ok(result) => result, Err(_) => { return ready(Err(ActixError::from(ServiceError { - status: 404, + status: 401, message: format!("Access token was not found") }))) } @@ -163,7 +163,7 @@ impl FromRequest for JwtAuth { ready(Ok(JwtAuth { token: access_token_uuid, user: user.into() })) } Err(_) => return ready(Err(ActixError::from(ServiceError { - status: 404, + status: 401, message: format!("User was not found") }))) } diff --git a/service/src/auth/routes.rs b/service/src/auth/routes.rs index f128f57..941f6ba 100644 --- a/service/src/auth/routes.rs +++ b/service/src/auth/routes.rs @@ -155,22 +155,7 @@ async fn refresh(req: HttpRequest) -> HttpResponse { Err(err) => return ResponseError::error_response(&err) }; - let mut conn = match db::redis_async_connection().await { - Ok(conn) => conn, - Err(err) => { - error!("Failed to get redis connection: {}", err); - return ResponseError::error_response(&err) - } - }; - - let redis_result: redis::RedisResult = conn.get(refresh_token_details.token_uuid.to_string()).await; - let email = match redis_result { - Ok(email) => email, - Err(_) => return ResponseError::error_response(&ServiceError { - status: 404, - message: format!("Refresh token was not found") - }) - }; + let email = refresh_token_details.email.clone(); match QueryUser::get_by_email(&email) { Ok(query_user) => { @@ -182,6 +167,14 @@ async fn refresh(req: HttpRequest) -> HttpResponse { } }; + let mut conn = match db::redis_async_connection().await { + Ok(conn) => conn, + Err(err) => { + error!("Failed to get redis connection: {}", err); + return ResponseError::error_response(&err) + } + }; + // Delete old auth token if it exists match req.cookie("access_token") { Some(cookie) => { diff --git a/ui/src/api/auth.ts b/ui/src/api/auth.ts index cee792b..ff25d94 100644 --- a/ui/src/api/auth.ts +++ b/ui/src/api/auth.ts @@ -1,10 +1,10 @@ import { getRequest, postRequest } from '.'; -import { RegisterUser, ResponseUser } from './auth.types'; +import { RegisterUser, ResponseAuth } from './auth.types'; -export async function login(email: string, password: string): Promise { +export async function login(email: string, password: string): Promise { const response = await postRequest('auth/login', { email, password }, { withCredentials: true }); if (response?.status === 200) { - return response.data as ResponseUser; + return response.data as ResponseAuth; } else { return undefined; } @@ -23,16 +23,16 @@ export async function logout() { return await postRequest('auth/logout', {}, { withCredentials: true }); } -export async function refresh(refresh_token_rotation?: boolean): Promise { +export async function refresh(refresh_token_rotation?: boolean): Promise { const response = await getRequest('auth/refresh', { withCredentials: true, params: { refresh_token_rotation } }); if (response?.status === 200) { - return response.data as ResponseUser; + return response.data as ResponseAuth; } else { return undefined; } } -export async function me(): Promise { +export async function me(): Promise { const response = await getRequest('auth/me', { withCredentials: true }); if (response?.status === 200) { return response.data; diff --git a/ui/src/api/auth.types.ts b/ui/src/api/auth.types.ts index 41acd80..8228ac1 100644 --- a/ui/src/api/auth.types.ts +++ b/ui/src/api/auth.types.ts @@ -1,4 +1,4 @@ -export interface ResponseUser { +export interface ResponseAuth { token: string; user: User; } diff --git a/ui/src/components/Topbar/index.tsx b/ui/src/components/Topbar/index.tsx index dc92f05..9e90bb7 100644 --- a/ui/src/components/Topbar/index.tsx +++ b/ui/src/components/Topbar/index.tsx @@ -23,7 +23,7 @@ import { import Cookies from 'js-cookie'; import { useEffect, useState } from 'react'; import { useForm } from '@mantine/form'; -import { login, register, logout, me } from '@/api/auth'; +import { login, register, logout, me, refresh } from '@/api/auth'; import { User } from '@/api/auth.types'; import { useToggle } from '@mantine/hooks'; @@ -82,7 +82,13 @@ export default function Topbar() { } }); } else { - setUser(undefined); + refresh(true).then((response) => { + if (response) { + setUser(response.user); + } else { + setUser(undefined); + } + }); } }, []);