c# - 无法创建 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();
}
}
}
解决方案
我已通过以下方式解决了此问题:
[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
});
推荐阅读
- node.js - 如何通过常见的 _id 字段过滤我的事件数组?
- java - signInWithEmailAndPassword(email, pass) 不适用于通过 Firebase Google SignIn 创建的帐户
- .htaccess - HTACCESS 重写规则导致重定向循环
- c++ - 如何将 x 打印为 0x,其中 x 是整数 C++
- excel - 如何纠正 if 语句然后添加此数字
- nginx - nginx权限问题在centos 7上提供静态文件
- php - 二维数组 - 按值搜索并返回数组的索引
- java - Java如何编写一个通用的Util来打印所有函数的当前执行的函数名?
- reactjs - 如何正确访问我的新 map () 对象作为数组
- c++ - 内核调用产生错误“错误:无法配置主机函数调用”。调用有什么问题?