Web API ChangePasswordAsync 控制器返回失败:

我正在构建一个 .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();

    }

  }


慕雪6442864
浏览 226回答 2
2回答

天涯尽头无女友

解决了它,通过使用:var&nbsp;user&nbsp;=&nbsp;await&nbsp;_userManager.FindByNameAsync(...);然后将其传递给 ChangePasswordAsyncvar&nbsp;result&nbsp;=&nbsp;await&nbsp;_userManager.ChangePasswordAsync(user,&nbsp;model.Password,&nbsp;model.NewPassword);

小唯快跑啊

错误 {Failed : PasswordMismatch} 是由于您传入的“currentPassword”参数与您作为“model.Password”发送的用户的现有密码(方法中的第二个参数)不匹配。该方法验证此值以确保用户就是他们所说的那样。public virtual Task<IdentityResult> ChangePasswordAsync(TUser user, string&nbsp;&nbsp; &nbsp; currentPassword, string newPassword);我建议调试它以确保您传递的是用户当前密码,而不是他们的新密码,并确保您检索到正确的用户。
打开App,查看更多内容
随时随地看视频慕课网APP