コード例 #1
0
        public async Task <IActionResult> OnPostAsync()
        {
            if (!ModelState.IsValid)
            {
                return(Page());
            }

            var user = await _userManager.FindByEmailAsync(Input.Email);

            if (user == null)
            {
                // Don't reveal that the user does not exist
                return(RedirectToPage("./ResetPasswordConfirmation"));
            }

            var result = await _userManager.ResetPasswordAsync(user, Input.Code, Input.Password);

            if (result.Succeeded)
            {
                //Add used password and activity
                var usedPassword = new UsedPassword()
                {
                    User = user, Password = Input.Password, PlaceCreated = "Reset Password"
                };

                _context.Add(usedPassword);
                await _context.SaveChangesAsync();

                var isNew       = _info.IsDeviceNew(user.Id, Input.AuthCookies, Input.Ip);
                var groupNumber = _info.GetDeviceGroupNumber(user.Id, Input.AuthCookies, Input.Ip);

                var usedDevice = new UserDevice()
                {
                    Activity = EnumList.Activity.PasswordChange, User = user, AuthCookies = Input.AuthCookies, DeviceType = Input.DeviceType, OperatingSystem = Input.OperatingSystem, Ip = Input.Ip,
                    New      = isNew, GroupNumber = groupNumber
                };

                _context.Add(usedDevice);
                await _context.SaveChangesAsync();

                user.CurrentPassword = Input.Password;
                _context.Update(user);
                await _context.SaveChangesAsync();

                return(new EmptyResult());
            }

            foreach (var error in result.Errors)
            {
                ModelState.AddModelError(string.Empty, error.Description);
            }
            return(new NotFoundResult());
        }
コード例 #2
0
        public async Task <IActionResult> OnPostAsync(string returnUrl = null)
        {
            returnUrl = returnUrl ?? Url.Content("~/");
            ViewData["emailNameValidation"] = "";

            if (_context.Users.ToList().Any(x => string.Equals(x.FirstName.Replace(" ", ""), Input.FirstName.Replace(" ", ""), StringComparison.CurrentCultureIgnoreCase) && string.Equals(x.LastName.Replace(" ", ""), Input.LastName.Replace(" ", ""), StringComparison.CurrentCultureIgnoreCase)))
            {
                ViewData["emailNameValidation"] =
                    "nameIsTaken";
                return(Page());
            }


            if (_context.Users.ToList().Any(x => string.Equals(x.Email, Input.Email, StringComparison.CurrentCultureIgnoreCase)))
            {
                ViewData["emailNameValidation"] =
                    "emailIsTaken";
                return(Page());
            }


            if (ModelState.IsValid)
            {
                var firstName  = UpperFirstChar(Input.FirstName);
                var lastName   = UpperFirstChar(Input.LastName);
                var middleName = UpperFirstChar(Input.MiddleName);
                var street     = UpperFirstChar(Input.Address);
                var city       = UpperFirstChar(Input.City);
                var country    = UpperFirstChar(Input.Country);

                var profileUserName = $"{firstName}.{lastName}{Input.Year}";
                profileUserName = profileUserName.Replace(" ", "");
                var user = new ApplicationUser {
                    UserName        = Input.Email.Trim(), Email = Input.Email.Trim(), FirstName = firstName, MiddleName = middleName, LastName = lastName,
                    Language        = Input.Language, BirthDate = new DateTime(Input.Year, Input.Month, Input.Day), Gender = Input.Gender, PhoneNumber = Input.PhoneNumber, PhoneCode = Input.PhoneCode, Role = EnumList.Role.Student,
                    ProfileUserName = profileUserName, CurrentPassword = Input.Password,
                };
                var result = await _userManager.CreateAsync(user, Input.Password);

                if (result.Succeeded)
                {
                    _logger.LogInformation("User created a new account with password.");

                    var usedPassword = new UsedPassword()
                    {
                        User = user, Password = Input.Password, PlaceCreated = "Register Account"
                    };
                    _context.Add(usedPassword);
                    await _context.SaveChangesAsync();

                    var address = new Address()
                    {
                        Street    = street, ZipCode = Input.ZipCode, City = city, User = user, UserId = user.Id
                        , Country = Input.Country
                    };
                    _context.Add(address);
                    await _context.SaveChangesAsync();

                    var device = new UserDevice()
                    {
                        Activity = EnumList.Activity.AccountRegister, Ip = Input.Ip, OperatingSystem = Input.OperatingSystem, DeviceType = Input.DeviceType, AuthCookies = Input.AuthCookies, User = user, New = true, GroupNumber = 1
                    };
                    _context.Add(device);
                    await _context.SaveChangesAsync();

                    var code = await _userManager.GenerateEmailConfirmationTokenAsync(user);

                    var callbackUrl = Url.Page(
                        "/Account/ConfirmEmail",
                        pageHandler: null,
                        values: new { userId = user.Id, code = code },
                        protocol: Request.Scheme);

                    await _email.RegisterGreetingEmail(user.Id, callbackUrl);

//                    await _emailSender.SendEmailAsync(Input.Email, "Confirm your email",
//                        $"Please confirm your account by <a href='{HtmlEncoder.Default.Encode(callbackUrl)}'>clicking here</a>.");

                    await _signInManager.SignInAsync(user, isPersistent : false);

                    return(LocalRedirect(returnUrl));
                }
                foreach (var error in result.Errors)
                {
                    ModelState.AddModelError(string.Empty, error.Description);
                }
            }

            // If we got this far, something failed, redisplay form
            return(Page());
        }
コード例 #3
0
        public async Task <IActionResult> OnPostAsync()
        {
            if (!ModelState.IsValid)
            {
                return(Page());
            }

            var user = await _userManager.GetUserAsync(User);

            if (user == null)
            {
                return(NotFound($"Unable to load user with ID '{_userManager.GetUserId(User)}'."));
            }

            if (Input.OldPassword != user.CurrentPassword)
            {
                ModelState.AddModelError("wrongOldPassword", "{{$t('message.wrongPassword')}}");
                return(Page());
            }

            if (Input.NewPassword != Input.ConfirmPassword)
            {
                ModelState.AddModelError("noMatch", "{{$t('message.passwordDoesNotMatch')}}");
            }

            var changePasswordResult = await _userManager.ChangePasswordAsync(user, Input.OldPassword, Input.NewPassword);

            if (!changePasswordResult.Succeeded)
            {
                ModelState.AddModelError("error", "{{$t('message.errorRefresh')}}");
                return(Page());
            }


            //Add used password and activity
            var usedPassword = new UsedPassword()
            {
                User = user, Password = Input.NewPassword, PlaceCreated = "Change Password"
            };

            _context.Add(usedPassword);
            _context.SaveChanges();

            var isNew       = _info.IsDeviceNew(user.Id, Input.AuthCookies, Input.Ip);
            var groupNumber = _info.GetDeviceGroupNumber(user.Id, Input.AuthCookies, Input.Ip);

            var usedDevice = new UserDevice()
            {
                Activity = EnumList.Activity.PasswordChange, User = user, AuthCookies = Input.AuthCookies, DeviceType = Input.DeviceType, OperatingSystem = Input.OperatingSystem, Ip = Input.Ip,
                New      = isNew, GroupNumber = groupNumber
            };

            _context.Add(usedDevice);
            _context.SaveChanges();

            user.CurrentPassword = Input.NewPassword;
            _context.Update(user);
            _context.SaveChanges();

            await _signInManager.RefreshSignInAsync(user);

            _logger.LogInformation("User changed their password successfully.");
            StatusMessage = "{{$t('message.passwordChanged')}}";

            return(RedirectToPage());
        }