@page "/login/{role}"
@using System.Text.Json
@using HealthcareManagerUiWebAssem.Models
@using HealthcareManagerUiWebAssem.Services.Authentication
@using HealthcareManagerUiWebAssem.Services.User
@using HealthcareManagerUiWebAssem.Services.UserSessionInformation
@layout AuthLayout
@inject IAuthenticationService AuthenticationService
@inject IUserSessionInformation UserSessionInformation;
@inject NavigationManager NavigationManager
@inject UserService UserService
Login
Login
Register
Reset Password
@code {
[SupplyParameterFromForm] public UserLoginModel? userLoginModel { get; set; }
private BaseResponse? loginResponse;
protected override void OnInitialized()
{
userLoginModel ??= new UserLoginModel();
}
[Parameter]
public string Role { get; set; }
private string errorMessage { get; set; }
private bool loginSuccesful { get; set; }
private void ClearErrorMessage()
{
errorMessage = string.Empty;
}
private async Task HandleLogin()
{
userLoginModel.UserType = Role;
loginResponse = await AuthenticationService.Login(userLoginModel); // Store response instead of immediately processing
if (loginResponse.StatusCode < 200 || loginResponse.StatusCode > 299)
{
errorMessage = loginResponse?.Message ?? "An error occurred."; // Handle error states immediately if required
}
else
{
var userId = Guid.Empty;
var authToken = "";
Console.WriteLine("Printing headers");
foreach (var (key, value) in loginResponse.Headers)
{
Console.WriteLine($"{key} => {value}");
}
if (loginResponse.Headers.TryGetValue("Authorization", out var token))
{
authToken = token;
}
if (Role.Equals("doctor", StringComparison.OrdinalIgnoreCase))
{
var doctor = JsonSerializer.Deserialize(
loginResponse.Data,
new JsonSerializerOptions { PropertyNameCaseInsensitive = true });
await UserSessionInformation.SaveUserInformationAsync(doctor.Id, Role, doctor.Email, doctor.Name, authToken);
userId = doctor.Id;
}
else if (Role.Equals("patient", StringComparison.OrdinalIgnoreCase))
{
var patient = JsonSerializer.Deserialize(
loginResponse.Data,
new JsonSerializerOptions { PropertyNameCaseInsensitive = true });
await UserSessionInformation.SaveUserInformationAsync(patient.Id, Role, patient.Email, patient.Name, authToken);
userId = patient.Id;
}
loginResponse = null;
UserService.SetUserId(userId);
NavigationManager.NavigateTo($"/dashboard/{Role}");
}
}
}