【问题标题】:ASP.NET ChangePassword userId = nullASP.NET ChangePassword userId = null
【发布时间】:2016-09-04 18:54:20
【问题描述】:

所以,我正在尝试使用默认的 ASP.NET 方法更改用户密码,但是不起作用,不知何故我无法获取当前用户数据。我尝试了不同的方法来获取 userId,但仍然没有。除了 [AllowAnonymous] 之外,我没有更改任何内容,因为当我尝试调用该方法时出现权限被拒绝的错误。

// POST api/Account/ChangePassword
    [AllowAnonymous]
    [Route("ChangePassword")]
    public async Task<IHttpActionResult> ChangePassword(ChangePasswordBindingModel model)
    {
        if (!ModelState.IsValid)
        {
            return BadRequest(ModelState);
        }

        IdentityResult result = await UserManager.ChangePasswordAsync(User.Identity.GetUserId(), model.OldPassword,
            model.NewPassword);

        if (!result.Succeeded)
        {
            return GetErrorResult(result);
        }

        return Ok();
    }

【问题讨论】:

    标签: c# asp.net controls change-password


    【解决方案1】:

    GetUserId() 是 IIdentity 上的扩展方法,它位于 Microsoft.AspNet.Identity.IdentityExtensions 中。确保您已使用 Microsoft.AspNet.Identity; 添加命名空间。

    否则你可以使用

    string currentUserId = User.Identity.GetUserId();
    ApplicationUser currentUser = db.Users.FirstOrDefault(x => x.Id == currentUserId);
    

    如果你使用 EF 则 User Application 用户代码

    【讨论】:

    • 没有 Microsoft.AspNet.Identity.IdentityExtensions,只有 Microsoft.AspNet.Identity.EntityFramework 和 Microsoft.AspNet.Identity.Owin;
    • 而且我不能使用 User.Identity.GetUserId();因为结果是空的。好像我登录了,参数没有设置。
    • 您使用的是哪种身份验证类型
    • 本地基于cookie的身份验证
    【解决方案2】:

    所以,我找到了答案……我忘了把这个放在请求上:

    authorization: bearer my_token
    

    【讨论】:

      猜你喜欢
      • 2015-06-22
      • 2016-01-25
      • 2010-10-26
      • 1970-01-01
      • 1970-01-01
      • 2020-06-26
      • 1970-01-01
      • 2016-09-20
      • 1970-01-01
      相关资源
      最近更新 更多