Yur*_*ura 2 .net c# asp.net-web-api owin
我需要create方法,如果我不知道旧密码,可以在数据库中更改密码.例如,我有下一个代码:
public IHttpActionResult ChangePassword(ChangePasswordBindingModel model)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
var result = UserManager.ChangePassword(User.Identity.GetUserId(), model.OldPassword,
model.NewPassword);
if (!result.Succeeded)
{
return GetErrorResult(result);
}
return Ok();
}
Run Code Online (Sandbox Code Playgroud)
在此代码中需要"model.OldPassword"但用户不知道旧密码.我只有密码和当前用户ID.
好吧,我不知道这是否是最佳的,但它很容易.
第一:
var code = await UserManager.GeneratePasswordResetTokenAsync(userId);
Run Code Online (Sandbox Code Playgroud)
然后
var result = await UserManager.ResetPasswordAsync(userId, code, someNewPassword);
Run Code Online (Sandbox Code Playgroud)
你甚至可以用扩展方法将其包装起来
public static class UserManagerEx
{
public static async Task<IdentityResult> ForceChangePassword<T, TUserId>(
this UserManager<T, TUserId> userManager,
TUserId userId,
string newPassword)
where T : class, IUser<TUserId>
where TUserId : IEquatable<TUserId>
{
var code = await userManager.GeneratePasswordResetTokenAsync(userId);
var result = await userManager.ResetPasswordAsync(userId, code, newPassword);
return result;
}
}
Run Code Online (Sandbox Code Playgroud)
然后叫它:
var result = UserManager.ForceChangePassword(userId, newPassword);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
434 次 |
| 最近记录: |