From 92e0eef36d8a13718f7ad91a623bbedbfd7b9116 Mon Sep 17 00:00:00 2001 From: "Cross, Liam (UG - Comp Sci & Elec Eng)" <lc01383@surrey.ac.uk> Date: Tue, 2 Apr 2024 15:35:34 +0000 Subject: [PATCH] Authorize now calls backend --- GatewayAPI/Program.cs | 3 ++- UserMicroservice/Controllers/UserController.cs | 6 +++++- client/src/providers/AuthProvider.tsx | 14 +++++++++++++- client/src/services/Authorise/Authorise.ts | 7 +++++++ client/src/services/Login/Login.ts | 2 +- client/src/services/Register/Register.ts | 2 +- 6 files changed, 29 insertions(+), 5 deletions(-) create mode 100644 client/src/services/Authorise/Authorise.ts diff --git a/GatewayAPI/Program.cs b/GatewayAPI/Program.cs index c8b364e..0ed1620 100644 --- a/GatewayAPI/Program.cs +++ b/GatewayAPI/Program.cs @@ -16,7 +16,8 @@ builder.Services.AddCors(options => { builder.WithOrigins("http://localhost:4200") .AllowAnyMethod() - .AllowAnyHeader(); + .AllowAnyHeader() + .AllowCredentials(); }); }); diff --git a/UserMicroservice/Controllers/UserController.cs b/UserMicroservice/Controllers/UserController.cs index b14e108..68e4dd2 100644 --- a/UserMicroservice/Controllers/UserController.cs +++ b/UserMicroservice/Controllers/UserController.cs @@ -59,8 +59,12 @@ namespace UserMicroservice.Controllers if (!int.TryParse(userIdString, out int userId)) return BadRequest("User ID is invalid."); + User? user = _userService.GetUser(userId); + if(user == null) + return Unauthorized(); + setAuthCookies(userId); - return Ok(); + return Ok(new { user.Id, user.Username, user.Email, user.Type }); } // POST: api/User/login diff --git a/client/src/providers/AuthProvider.tsx b/client/src/providers/AuthProvider.tsx index 668859c..9322a12 100644 --- a/client/src/providers/AuthProvider.tsx +++ b/client/src/providers/AuthProvider.tsx @@ -1,6 +1,7 @@ import { ReactNode, useEffect, useState } from 'react'; import { AuthContext } from '../contexts/AuthContext'; import Spinner from '../components/Spinner/Spinner'; +import { authoriseUser } from '../services/Authorise/Authorise'; export interface IUser { id: number; @@ -15,7 +16,18 @@ function AuthProvider({ children }: { children: ReactNode }) { const [user, setUser] = useState<IUser>(); useEffect(() => { - setTimeout(() => setLoading(false), 500); // Fake api timer + async function authUser() { + try { + const result = await authoriseUser(); + giveAuth(); + updateUser(result.data); + setLoading(false); + } catch (error) { + setLoading(false); + } + } + + authUser(); }, []); const giveAuth = () => { diff --git a/client/src/services/Authorise/Authorise.ts b/client/src/services/Authorise/Authorise.ts new file mode 100644 index 0000000..d01fa96 --- /dev/null +++ b/client/src/services/Authorise/Authorise.ts @@ -0,0 +1,7 @@ +import { AxiosResponse } from 'axios'; +import Api from '../../helpers/Api'; +import { IUser } from '../../providers/AuthProvider'; + +export async function authoriseUser(): Promise<AxiosResponse<IUser>> { + return Api.post('User/authorize', {}, { withCredentials: true }); +} diff --git a/client/src/services/Login/Login.ts b/client/src/services/Login/Login.ts index f29ae64..573fa72 100644 --- a/client/src/services/Login/Login.ts +++ b/client/src/services/Login/Login.ts @@ -7,5 +7,5 @@ export async function loginUser(form: ILoginForm): Promise<AxiosResponse<IUser>> return Api.post('User/login', { Email: form.email, Password: form.password - }); + }, { withCredentials: true }); } diff --git a/client/src/services/Register/Register.ts b/client/src/services/Register/Register.ts index 1b7fd7f..5d4416a 100644 --- a/client/src/services/Register/Register.ts +++ b/client/src/services/Register/Register.ts @@ -10,5 +10,5 @@ export async function registerUser(form: IRegisterForm): Promise<AxiosResponse<I Username: form.name, Password: form.password, UserType: userStringToType(form.customerType) - }); + }, { withCredentials: true }); } -- GitLab