首页 > 解决方案 > 无法创建 HttpGet 控制器以使用身份查找用户详细信息

问题描述

我已经创建了身份验证控制器,并且可以创建用于登录和注销的 HttpPost,但不能创建 HttpGet。我正在尝试的是只有经过身份验证的用户才能点击并返回有关当前登录用户的基本信息,至少用户名、员工(如果有)我创建了三个角色,即管理员和员工。

namespace Web.Controllers
{
    [Route("api/[controller]")]
    [ApiController]
    public class AuthenticationController : ControllerBase
    {
        private readonly UserManager<User> userManager;
        private readonly SignInManager<User> signInManager;

        public object DefaultAuthenticationTypes { get; private set; }

        public AuthenticationController(UserManager<User> userManager, SignInManager<User> signInManager)
        {
            this.userManager = userManager;
            this.signInManager = signInManager;
        }

        [HttpPost("login")]
        public async Task<ActionResult<UserDto>> Login(LoginDto dto)
        {
            var user = await userManager.FindByNameAsync(dto.UserName);

            if (user == null)
            {
                return BadRequest();
            }

            var password = await signInManager.CheckPasswordSignInAsync(user, dto.Password, true);

            if (!password.Succeeded)
            {
                return BadRequest();
            }

            await signInManager.SignInAsync(user, false, "Password");

            return Ok(new UserDto
            {
                UserName = user.UserName
            });
        }

        [HttpGet]
        [Authorize]
       public async Task<string> GetUserProfile()
        {
           
            var userName = await userManager.FindByNameAsync(HttpContext.User.Identity.Name);
            var userId = userName.Id;
            var roleId = User.IsInRole("Staff");
            

            
            if (!(roleId.ToString() == "Staff"))
            {
                return userName.ToString();
            }
            return userId.ToString();

        }
        






        [HttpPost("logout")]
        public async Task<ActionResult> logout()
        {
            await signInManager.SignOutAsync();
            return Ok();
        }
    }
}

标签: c#asp.net-coreasp.net-web-apiasp.net-identity

解决方案


我已通过以下方式解决了此问题:

[HttpGet]
        [Authorize]
       public async Task<object> GetUserProfile()
        {
           
            var userName = await userManager.FindByNameAsync(HttpContext.User.Identity.Name);
            var userId = userName.Id;
            var role = await userManager.GetRolesAsync(userName);
           
            if (User.IsInRole("Staff"))
            {
                return Ok(new 
                {
                    userName,
                    userId
                }); 
                    
            }
            return Ok(new 
            {
                 userName,
                 role

            });

推荐阅读