@page "/login" @using BootStrapComponents @using Components @using Models.Identity @layout LayoutWithoutMenu <img src="/assets/images/logo.png" class="@BT.CenterBlock m-2" style="max-width:30%;" /> <style> div.login-fields-container { margin-top: 5vh; border-radius: 2em; border-top: solid 0.2em orange; height: 90vh; padding: 1em; } </style> <div class="@BT.Background(ColorType.white) login-fields-container"> <EditForm Model="@OtpLoginModel" OnValidSubmit="Submit"> <DataAnotationsValidator /> <p class="@BT.CenterBlock @BT.TextAlign(TextAlignment.center) h4" style="margin-top:2vh"> ورود / ثبت نام </p> <p class="@(BT.TextAlign(TextAlignment.center)) @BT.TextColor(ColorType.secondary) @BT.MarginTop(5) h6"> @if (!WaitForOtp) { <span> لطفا شماره همراه خود را وارد کنید. </span> } else { <span> لطفا کد تائید پیامک شده را وارد کنید. </span> } </p> @if (!WaitForOtp) { <span> <input placeholder="تلفن همراه" @bind="OtpLoginModel.Username" class="@BT.Input @BT.MarginTop(5)" type="tel"> </span> } else { <span> <input placeholder="کد تائید" @bind="LoginModel.Password" class="@BT.Input @BT.MarginTop(5)" type="number"> </span> } <p class="h6 @BT.TextAlign(TextAlignment.center)" style="font-size:2vh;margin-top:5vh;"> ورود شما به معنای پذیرش <a href="/login"> شرایط حقتو و قوانین حریم خصوصی </a> است </p> <button type="submit" class="@BT.Button(ColorType.primary) @BT.CenterBlock" style="margin-top:5vh"> ورود </button> <div class="@BT.Row @BT.TextAlign(TextAlignment.center)" style="margin-top:12vh"> <hr class="@BT.TextColor(ColorType.warning)" /> <p> © تمامی حقوق برای حقتو محفوظ میباشد </p> <br /> <p> ورژن 1.1 </p> </div> </EditForm> </div> <style> .form { display: flex; flex-direction: column; align-items: center; align-content: center; } .form-control { margin: 5px 5px; } </style> @code { private bool WaitForOtpMode { get; set; } = true; protected OTPLoginModel OtpLoginModel { get; set; } = new(); protected bool WaitForOtp { set; get; } = false; public async void Submit() { if (WaitForOtp) await RequestLogin(); else await RequestVerificationCode(); } protected async Task RequestVerificationCode() { var response = await _userUtils.SendVerificationRequest(OtpLoginModel); if (response.IsSuccessStatusCode) WaitForOtp = true; StateHasChanged(); } protected LoginModel LoginModel { get; set; } = new(); protected async Task RequestLogin() { LoginModel.Username = OtpLoginModel.Username; var response = await _userUtils.LoginWithPasswordRequest(LoginModel); if (response.IsSuccessStatusCode) { var result = await response.Content.ReadFromJsonAsync<Models.Identity.PlainToken>(); await LocalStorage.SetItemAsync(Statics.LoginTokenKey, result.AccessToken); NavManager.NavigateTo("/dashboard"); } } }