コード例 #1
0
        public async Task <IdentityResult> ChangePasswordAsync(User user, string newPassword, CancellationToken token = default)
        {
            var store = this.Store as IUserPasswordStore <User>;

            if (store == null)
            {
                var errors = new IdentityError[]
                {
                    new IdentityError {
                        Description = "Current UserStore doesn't implement IUserPasswordStore"
                    }
                };

                return(IdentityResult.Failed(errors));
            }

            if (PasswordValidators.Any())
            {
                var tasks   = PasswordValidators.Select(x => x.ValidateAsync(this, user, newPassword));
                var results = await Task.WhenAll(tasks);

                if (results.Any(x => !x.Succeeded))
                {
                    return(results.First(x => !x.Succeeded));
                }
            }

            var newPasswordHash = PasswordHasher.HashPassword(user, newPassword);

            await store.SetPasswordHashAsync(user, newPasswordHash, token);

            return(IdentityResult.Success);
        }