コード例 #1
0
        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");
            }
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        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"
            }));
        }