首页 > 解决方案 > 用户通过身份验证时调用 Web Api 方法

问题描述

当用户通过身份验证时,我在调用 Web Api 方法时遇到问题。

事实是,当我在对用户进行身份验证时调用 Web Api 方法时,它不会被重新识别。

以前,我在 AccountController 中的 Logout 方法有问题。我通过使用 AllowAnonymous 属性解决了它。

但是,现在我在使用 ChangePassword 方法时遇到了同样的问题。在这种情况下,我无法添加 AllowAnonymous 属性,因为当我这样做时,我无法检索登录的用户 ID。

如果我不添加 AllowAnonymous 属性,系统会抛出一个禁止的错误。

我被困在这里....我该如何解决?

例如,这是 AccountController 中的 ChangePassword 方法:

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

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

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

        }

        return Ok();
    }

谢谢詹姆

标签: c#authenticationasp.net-web-apiasp.net-web-api2

解决方案


问题是由于我没有随请求发送不记名令牌。

            var tokenKey = 'accessToken';
            var token = sessionStorage.getItem(tokenKey);
            var headers = {};
            if (token) {
                headers.Authorization = 'Bearer ' + token;
            }

            $.ajax({
                type: 'POST',
                url: "/api/Account/ChangePassword",
                data: JSON.stringify(data),
                headers: headers,
                contentType: 'application/json; charset=utf-8'
            })

现在它起作用了。

问候

海梅


推荐阅读