为了账号安全,请及时绑定邮箱和手机立即绑定

Web API ChangePasswordAsync 控制器返回失败:

Web API ChangePasswordAsync 控制器返回失败:

C#
慕雪6442864 2021-12-25 18:45:44
我正在构建一个 .net core 2 Identity 应用程序。它使用 JWT 令牌作为 Vuejs 前端。我正在编写更新密码控制器,该控制器首先检查令牌,然后使用更改密码,ChangePasswordAsync但我不断收到响应:{Failed : PasswordMismatch}.我的控制器代码如下。我已经成功地编写了登录和注册控制器,但没有成功。登录用户ctrustUser成功返回,然后我使用该数据传递到ChangePasswordAsync登录用户数据中。请你能帮我。  [Authorize(Policy = "ApiUser")]  [Route("api/[controller]/[action]")]  public class AccountsEditController : Controller  {    private readonly ClaimsPrincipal _caller;    private readonly ApplicationCtrustUsersDbContext _appDbContext;    private readonly UserManager<AppAdminUser> _userManager;    private readonly IMapper _mapper;    public AccountsEditController(UserManager<AppAdminUser> userManager, ApplicationCtrustUsersDbContext appDbContext, IHttpContextAccessor httpContextAccessor, IMapper mapper)    {      _userManager = userManager;      _caller = httpContextAccessor.HttpContext.User;      _appDbContext = appDbContext;      _mapper = mapper;    }    // POST api/accountsedit/updatepassword    [HttpPost]    public async Task<IActionResult>UpdatePassword([FromBody]UpdatePasswordViewModel model)    {      // simulate slightly longer running operation to show UI state change      await Task.Delay(250);      if (!ModelState.IsValid)      {        return BadRequest(ModelState);      }      // retrieve the user info      var userId = _caller.Claims.Single(c => c.Type == "id");      var ctrustUser = await _appDbContext.CtrustUser.Include(c => c.Identity).SingleAsync(c => c.Identity.Id == userId.Value);      AppAdminUser userIdentity = new AppAdminUser();    }  }
查看完整描述

2 回答

?
天涯尽头无女友

TA贡献1831条经验 获得超9个赞

解决了它,通过使用:

var user = await _userManager.FindByNameAsync(...);

然后将其传递给 ChangePasswordAsync

var result = await _userManager.ChangePasswordAsync(user, model.Password, model.NewPassword);


查看完整回答
反对 回复 2021-12-25
?
小唯快跑啊

TA贡献1863条经验 获得超2个赞

错误 {Failed : PasswordMismatch} 是由于您传入的“currentPassword”参数与您作为“model.Password”发送的用户的现有密码(方法中的第二个参数)不匹配。该方法验证此值以确保用户就是他们所说的那样。


public virtual Task<IdentityResult> ChangePasswordAsync(TUser user, string 

    currentPassword, string newPassword);

我建议调试它以确保您传递的是用户当前密码,而不是他们的新密码,并确保您检索到正确的用户。


查看完整回答
反对 回复 2021-12-25
  • 2 回答
  • 0 关注
  • 225 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号