Example #1
0
        public async Task <IActionResult> ChangePasswordWithToken(TokenResetViewModel model)
        {
            var result = await _recovery.ChangePasswordWithToken(model);

            if (result is null)
            {
                return(Ok());
            }

            return(BadRequest(result));
        }
Example #2
0
        public async Task <IEnumerable <IdentityError> > ChangePasswordWithToken(TokenResetViewModel model)
        {
            var user = await _userManager.FindByIdAsync(model.UserId);

            if (user is null)
            {
                return(new List <IdentityError>
                {
                    new IdentityError {
                        Code = "IncorrectUser", Description = $"User {model.UserId} does not exist."
                    }
                });
            }
            if (await _userManager.CheckPasswordAsync(user, model.Password))
            {
                return(new List <IdentityError>
                {
                    new IdentityError {
                        Code = "OldNewPassword", Description = $"This password is currently used on this account"
                    }
                });
            }

            var result = await _userManager.ResetPasswordAsync(user, model.Token, model.Password);

            if (result.Succeeded)
            {
                if (model.SignOutOfAll)
                {
                    var sessions = _sessionContext.Where(s => s.UserId == int.Parse(model.UserId) && s.Fingerprint != model.Fingerprint).ToList();
                    _sessionContext.RemoveRange(sessions);

                    await _context.SaveChangesAsync();
                }

                return(null);
            }

            return(result.Errors);
        }