async Task SignIn() { try { #if DEBUG if ((bool)Application.Current.Resources["LoginOk"]) { Application.Current.MainPage = new MasterPage() { IsPresented = true }; return; } #endif if (!ValidateInformation()) { await Application.Current.MainPage.DisplayAlert("Aviso", "Verifica que todos los campos se encuentren completos.", "Aceptar"); } else if (!IsBusy) { IsBusy = true; //clean any previous session SignOutPage.CleanCurrentSession(); //launch task SignInAccountRequest model = new SignInAccountRequest() { username = Username, password = Password }; SignInAccountResponse response = await RestHelper.SignInAccountAsync(model); if (response.Status != ResponseStatus.Ok) { await Application.Current.MainPage.DisplayAlert("Error", response.Message, "Aceptar"); } else { Settings.Profile_Username = response.Username; Settings.Profile_Picture = $"{Settings.ImageStorageUrl}/{Settings.AccountImageStorageUrl}/{response.Image}"; IsBusy = false; await Task.Delay(10); Application.Current.MainPage = new MasterPage() { IsPresented = true }; } IsBusy = false; } } catch (Exception ex) { Microsoft.AppCenter.Crashes.Crashes.TrackError(ex); await Application.Current.MainPage.DisplayAlert("Error", "Ocurrió un error inesperado", "Aceptar"); } }
public static async Task <SignInAccountResponse> SignInAccountAsync(SignInAccountRequest model) { int IterationsToRetry = 5; int TimeToSleepForRetry = 3000; SignInAccountResponse result = new SignInAccountResponse(); if (Helpers.ConnectivyHelper.CheckConnectivity() != Enums.ConnectivtyResultEnum.HasConnectivity) { result.Status = Enums.ResponseStatus.CommunicationError; result.Message = "El dispositivo no pudo comunicarse con el servidor, comprueba que tengas conexión a internet"; return(result); } model.token = GetToken(); for (int i = 0; i <= IterationsToRetry; i++) { try { using (var client = new HttpClient()) { var service = $"{Settings.FunctionURL}/api/SignInAccount/"; byte[] byteData = Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(model)); using (var content = new ByteArrayContent(byteData)) { content.Headers.ContentType = new MediaTypeHeaderValue("application/json"); var httpResponse = await client.PostAsync(service, content); result = JsonConvert.DeserializeObject <SignInAccountResponse>(await httpResponse.Content.ReadAsStringAsync()); if (httpResponse.StatusCode == HttpStatusCode.OK) { result.Status = Enums.ResponseStatus.Ok; } else { result.Status = Enums.ResponseStatus.Error; } return(result); } } } catch (Exception) { result.Status = Enums.ResponseStatus.CommunicationError; result.Message = "Ocurrió un error durante el proceso, por favor intenta de nuevo o espera unos minutos antes de vovler a intentar"; Thread.Sleep(TimeToSleepForRetry); continue; } } return(result); }
public async Task <IActionResult> SignIn([FromBody] SignInAccountRequest request) { var result = await _signInManager.PasswordSignInAsync( request.Login, request.Password, request.IsPersistent, lockoutOnFailure : false); if (result.Succeeded) { Trace.Write(User.Identity.IsAuthenticated); return(NoContent()); } if (result.IsNotAllowed) { return(StatusCode((int)HttpStatusCode.Forbidden, new Error { Code = "IsNotAllowed", Message = "Action is not allowed for the user." })); } if (result.IsLockedOut) { var user = await _userManager.FindByNameAsync(request.Login); var lockoutDate = await _userManager.GetLockoutEndDateAsync(user); return(StatusCode((int)HttpStatusCode.Unauthorized, new AccountLockedError { Code = "IsLockedOut", Message = "User is blocked.", LockedEndDate = lockoutDate })); } return(StatusCode((int)HttpStatusCode.Forbidden, new Error { Code = "Unathorized", Message = "Login or password is wrong" })); }