diff --git a/ShoppingAssistantWebClient.Web/Pages/Login.cshtml b/ShoppingAssistantWebClient.Web/Pages/Login.cshtml new file mode 100644 index 0000000..bfee3d5 --- /dev/null +++ b/ShoppingAssistantWebClient.Web/Pages/Login.cshtml @@ -0,0 +1,56 @@ +@page "/loginrazor" +@model ShoppingAssistantWebClient.Web.Pages.LoginModel + + + + + +
+
+ @if (!string.IsNullOrWhiteSpace(Model.ErrorMessage)) + { +
+ @Model.ErrorMessage +
+ } + +
+ + +
or
+ + + + + +
+
+
+ +@section Scripts { + +} diff --git a/ShoppingAssistantWebClient.Web/Pages/Login.cshtml.cs b/ShoppingAssistantWebClient.Web/Pages/Login.cshtml.cs new file mode 100644 index 0000000..58d2a3d --- /dev/null +++ b/ShoppingAssistantWebClient.Web/Pages/Login.cshtml.cs @@ -0,0 +1,47 @@ +using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Mvc.RazorPages; +using ShoppingAssistantWebClient.Web.Models.Input; +using ShoppingAssistantWebClient.Web.Network; + +namespace ShoppingAssistantWebClient.Web.Pages; + +public class LoginModel : PageModel +{ + [BindProperty] + public LoginInputModel Input { get; set; } + + public string ErrorMessage { get; set; } + + public AuthenticationService AuthenticationService { get; set; } + + public void OnGet() + { + } + + public async Task OnPostAsync() + { + if (!ModelState.IsValid) + { + return Page(); + } + + if (Input.IsEmailOrPhoneProvided) + { + try + { + await AuthenticationService.LoginAsync(Input); + return RedirectToPage("/"); + } + catch (Exception ex) + { + ErrorMessage = "Login failed. Please try again."; + return Page(); + } + } + else + { + ErrorMessage = "Please provide an email or phone number."; + return Page(); + } + } +} diff --git a/ShoppingAssistantWebClient.Web/Pages/Settings.razor b/ShoppingAssistantWebClient.Web/Pages/Settings.razor index ecfacaa..dca3f1d 100644 --- a/ShoppingAssistantWebClient.Web/Pages/Settings.razor +++ b/ShoppingAssistantWebClient.Web/Pages/Settings.razor @@ -143,7 +143,7 @@ } private void RedirectToLogin() { - var url = $"/login"; + var url = $"/loginrazor"; NavigationManager.NavigateTo(url); }