Expose some internal helpers (#1348)
Validate/UpdateUser/Role are now protected
This commit is contained in:
parent
e2ef51b57c
commit
f3e2511672
|
|
@ -160,7 +160,7 @@ namespace Microsoft.AspNetCore.Identity
|
||||||
{
|
{
|
||||||
throw new ArgumentNullException(nameof(role));
|
throw new ArgumentNullException(nameof(role));
|
||||||
}
|
}
|
||||||
var result = await ValidateRoleInternal(role);
|
var result = await ValidateRoleAsync(role);
|
||||||
if (!result.Succeeded)
|
if (!result.Succeeded)
|
||||||
{
|
{
|
||||||
return result;
|
return result;
|
||||||
|
|
@ -415,7 +415,13 @@ namespace Microsoft.AspNetCore.Identity
|
||||||
_disposed = true;
|
_disposed = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task<IdentityResult> ValidateRoleInternal(TRole role)
|
/// <summary>
|
||||||
|
/// Should return <see cref="IdentityResult.Success"/> if validation is successful. This is
|
||||||
|
/// called before saving the role via Create or Update.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="role">The role</param>
|
||||||
|
/// <returns>A <see cref="IdentityResult"/> representing whether validation was successful.</returns>
|
||||||
|
protected virtual async Task<IdentityResult> ValidateRoleAsync(TRole role)
|
||||||
{
|
{
|
||||||
var errors = new List<IdentityError>();
|
var errors = new List<IdentityError>();
|
||||||
foreach (var v in RoleValidators)
|
foreach (var v in RoleValidators)
|
||||||
|
|
@ -434,9 +440,14 @@ namespace Microsoft.AspNetCore.Identity
|
||||||
return IdentityResult.Success;
|
return IdentityResult.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task<IdentityResult> UpdateRoleAsync(TRole role)
|
/// <summary>
|
||||||
|
/// Called to update the role after validating and updating the normalized role name.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="role">The role.</param>
|
||||||
|
/// <returns>Whether the operation was successful.</returns>
|
||||||
|
protected virtual async Task<IdentityResult> UpdateRoleAsync(TRole role)
|
||||||
{
|
{
|
||||||
var result = await ValidateRoleInternal(role);
|
var result = await ValidateRoleAsync(role);
|
||||||
if (!result.Succeeded)
|
if (!result.Succeeded)
|
||||||
{
|
{
|
||||||
return result;
|
return result;
|
||||||
|
|
|
||||||
|
|
@ -454,7 +454,7 @@ namespace Microsoft.AspNetCore.Identity
|
||||||
{
|
{
|
||||||
ThrowIfDisposed();
|
ThrowIfDisposed();
|
||||||
await UpdateSecurityStampInternal(user);
|
await UpdateSecurityStampInternal(user);
|
||||||
var result = await ValidateUserInternal(user);
|
var result = await ValidateUserAsync(user);
|
||||||
if (!result.Succeeded)
|
if (!result.Succeeded)
|
||||||
{
|
{
|
||||||
return result;
|
return result;
|
||||||
|
|
@ -872,8 +872,7 @@ namespace Microsoft.AspNetCore.Identity
|
||||||
{
|
{
|
||||||
return IdentityResult.Failed(ErrorDescriber.InvalidToken());
|
return IdentityResult.Failed(ErrorDescriber.InvalidToken());
|
||||||
}
|
}
|
||||||
var passwordStore = GetPasswordStore();
|
var result = await UpdatePasswordHash(user, newPassword, validatePassword: true);
|
||||||
var result = await UpdatePasswordHash(passwordStore, user, newPassword);
|
|
||||||
if (!result.Succeeded)
|
if (!result.Succeeded)
|
||||||
{
|
{
|
||||||
return result;
|
return result;
|
||||||
|
|
@ -2253,7 +2252,7 @@ namespace Microsoft.AspNetCore.Identity
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
internal IUserTwoFactorStore<TUser> GetUserTwoFactorStore()
|
private IUserTwoFactorStore<TUser> GetUserTwoFactorStore()
|
||||||
{
|
{
|
||||||
var cast = Store as IUserTwoFactorStore<TUser>;
|
var cast = Store as IUserTwoFactorStore<TUser>;
|
||||||
if (cast == null)
|
if (cast == null)
|
||||||
|
|
@ -2263,7 +2262,7 @@ namespace Microsoft.AspNetCore.Identity
|
||||||
return cast;
|
return cast;
|
||||||
}
|
}
|
||||||
|
|
||||||
internal IUserLockoutStore<TUser> GetUserLockoutStore()
|
private IUserLockoutStore<TUser> GetUserLockoutStore()
|
||||||
{
|
{
|
||||||
var cast = Store as IUserLockoutStore<TUser>;
|
var cast = Store as IUserLockoutStore<TUser>;
|
||||||
if (cast == null)
|
if (cast == null)
|
||||||
|
|
@ -2273,7 +2272,7 @@ namespace Microsoft.AspNetCore.Identity
|
||||||
return cast;
|
return cast;
|
||||||
}
|
}
|
||||||
|
|
||||||
internal IUserEmailStore<TUser> GetEmailStore(bool throwOnFail = true)
|
private IUserEmailStore<TUser> GetEmailStore(bool throwOnFail = true)
|
||||||
{
|
{
|
||||||
var cast = Store as IUserEmailStore<TUser>;
|
var cast = Store as IUserEmailStore<TUser>;
|
||||||
if (throwOnFail && cast == null)
|
if (throwOnFail && cast == null)
|
||||||
|
|
@ -2283,7 +2282,7 @@ namespace Microsoft.AspNetCore.Identity
|
||||||
return cast;
|
return cast;
|
||||||
}
|
}
|
||||||
|
|
||||||
internal IUserPhoneNumberStore<TUser> GetPhoneNumberStore()
|
private IUserPhoneNumberStore<TUser> GetPhoneNumberStore()
|
||||||
{
|
{
|
||||||
var cast = Store as IUserPhoneNumberStore<TUser>;
|
var cast = Store as IUserPhoneNumberStore<TUser>;
|
||||||
if (cast == null)
|
if (cast == null)
|
||||||
|
|
@ -2304,7 +2303,7 @@ namespace Microsoft.AspNetCore.Identity
|
||||||
}
|
}
|
||||||
|
|
||||||
// Update the security stamp if the store supports it
|
// Update the security stamp if the store supports it
|
||||||
internal async Task UpdateSecurityStampInternal(TUser user)
|
private async Task UpdateSecurityStampInternal(TUser user)
|
||||||
{
|
{
|
||||||
if (SupportsUserSecurityStamp)
|
if (SupportsUserSecurityStamp)
|
||||||
{
|
{
|
||||||
|
|
@ -2312,12 +2311,22 @@ namespace Microsoft.AspNetCore.Identity
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
internal async Task<IdentityResult> UpdatePasswordHash(IUserPasswordStore<TUser> passwordStore,
|
/// <summary>
|
||||||
|
/// Updates a user's password hash.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="user">The user.</param>
|
||||||
|
/// <param name="newPassword">The new password.</param>
|
||||||
|
/// <param name="validatePassword">Whether to validate the password.</param>
|
||||||
|
/// <returns>Whether the password has was successfully updated.</returns>
|
||||||
|
protected virtual Task<IdentityResult> UpdatePasswordHash(TUser user, string newPassword, bool validatePassword)
|
||||||
|
=> UpdatePasswordHash(GetPasswordStore(), user, newPassword, validatePassword);
|
||||||
|
|
||||||
|
private async Task<IdentityResult> UpdatePasswordHash(IUserPasswordStore<TUser> passwordStore,
|
||||||
TUser user, string newPassword, bool validatePassword = true)
|
TUser user, string newPassword, bool validatePassword = true)
|
||||||
{
|
{
|
||||||
if (validatePassword)
|
if (validatePassword)
|
||||||
{
|
{
|
||||||
var validate = await ValidatePasswordInternal(user, newPassword);
|
var validate = await ValidatePasswordAsync(user, newPassword);
|
||||||
if (!validate.Succeeded)
|
if (!validate.Succeeded)
|
||||||
{
|
{
|
||||||
return validate;
|
return validate;
|
||||||
|
|
@ -2377,16 +2386,22 @@ namespace Microsoft.AspNetCore.Identity
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Generates the token purpose used to change email
|
/// Generates the token purpose used to change email.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="newEmail"></param>
|
/// <param name="newEmail">The new email address.</param>
|
||||||
/// <returns></returns>
|
/// <returns>The token purpose.</returns>
|
||||||
protected static string GetChangeEmailTokenPurpose(string newEmail)
|
protected static string GetChangeEmailTokenPurpose(string newEmail)
|
||||||
{
|
{
|
||||||
return "ChangeEmail:" + newEmail;
|
return "ChangeEmail:" + newEmail;
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task<IdentityResult> ValidateUserInternal(TUser user)
|
/// <summary>
|
||||||
|
/// Should return <see cref="IdentityResult.Success"/> if validation is successful. This is
|
||||||
|
/// called before saving the user via Create or Update.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="user">The user</param>
|
||||||
|
/// <returns>A <see cref="IdentityResult"/> representing whether validation was successful.</returns>
|
||||||
|
protected async Task<IdentityResult> ValidateUserAsync(TUser user)
|
||||||
{
|
{
|
||||||
if (SupportsUserSecurityStamp)
|
if (SupportsUserSecurityStamp)
|
||||||
{
|
{
|
||||||
|
|
@ -2413,7 +2428,14 @@ namespace Microsoft.AspNetCore.Identity
|
||||||
return IdentityResult.Success;
|
return IdentityResult.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task<IdentityResult> ValidatePasswordInternal(TUser user, string password)
|
/// <summary>
|
||||||
|
/// Should return <see cref="IdentityResult.Success"/> if validation is successful. This is
|
||||||
|
/// called before updating the password hash.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="user">The user.</param>
|
||||||
|
/// <param name="password">The password.</param>
|
||||||
|
/// <returns>A <see cref="IdentityResult"/> representing whether validation was successful.</returns>
|
||||||
|
protected async Task<IdentityResult> ValidatePasswordAsync(TUser user, string password)
|
||||||
{
|
{
|
||||||
var errors = new List<IdentityError>();
|
var errors = new List<IdentityError>();
|
||||||
foreach (var v in PasswordValidators)
|
foreach (var v in PasswordValidators)
|
||||||
|
|
@ -2432,9 +2454,14 @@ namespace Microsoft.AspNetCore.Identity
|
||||||
return IdentityResult.Success;
|
return IdentityResult.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task<IdentityResult> UpdateUserAsync(TUser user)
|
/// <summary>
|
||||||
|
/// Called to update the user after validating and updating the normalized email/user name.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="user">The user.</param>
|
||||||
|
/// <returns>Whether the operation was successful.</returns>
|
||||||
|
protected virtual async Task<IdentityResult> UpdateUserAsync(TUser user)
|
||||||
{
|
{
|
||||||
var result = await ValidateUserInternal(user);
|
var result = await ValidateUserAsync(user);
|
||||||
if (!result.Succeeded)
|
if (!result.Succeeded)
|
||||||
{
|
{
|
||||||
return result;
|
return result;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue