【发布时间】:2022-09-24 16:27:19
【问题描述】:
我在核心中使用身份。
在启动中。
services.AddSingleton<ICurrentUserService, CurrentUserService>();
services.AddHttpContextAccessor();
在 accountcontroller 中
[ApiController]
[Route(\"api/[controller]\")]
public class AccountController : Controller
{
private readonly IApplicationUserManager _userManager;
private readonly SignInManager<ApplicationUser> _signInManager;
public AccountController
(IApplicationUserManager userManager,
SignInManager<ApplicationUser> signInManager)
{
_userManager = userManager;
//_roleManager = roleManager;
_signInManager = signInManager;
}
[HttpPost(\"Login\")]
[AllowAnonymous]
public async Task<IActionResult> Login(LoginViewModel model)
{
try
{
await _signInManager.SignOutAsync();
var result = await _signInManager.PasswordSignInAsync(model.email, model.password, true, false);
if (result.Succeeded)
{
return Json(new { success = true});
}
var message = string.Join(\"; \", ModelState.Values
.SelectMany(x => x.Errors)
.Select(x => x.ErrorMessage));
return Json(new
{
success = false,
Message = message
});
}
catch (Exception e)
{
return Json(new
{
success = false,
Message = e.Message
});
}
}
[HttpPost(\"logout\")]
public IActionResult LogOut()
{
try
{
_signInManager.SignOutAsync();
return Ok(new { success = true });
}
catch (Exception e)
{
return Ok(new { success = false, Message = e.Message });
}
}
}
}
并在 CurrentUserService
public class CurrentUserService : ICurrentUserService
{
private readonly IHttpContextAccessor _httpContextAccessor;
public CurrentUserService(IHttpContextAccessor httpContextAccessor)
{
_httpContextAccessor = httpContextAccessor;
}
public Guid? UserId => Guid.Parse(_httpContextAccessor.HttpContext?.User?.FindFirstValue(ClaimTypes.NameIdentifier) ?? string.Empty);
public string FullName => _httpContextAccessor.HttpContext?.User?.FindFirstValue(\"FullName\") != null
? _httpContextAccessor.HttpContext?.User?.FindFirstValue(\"FullName\")
: _httpContextAccessor.HttpContext?.User?.FindFirstValue(ClaimTypes.Name);
public string Avatar => _httpContextAccessor.HttpContext?.User?.FindFirstValue(\"Avatar\") != null
? _httpContextAccessor.HttpContext?.User?.FindFirstValue(\"Avatar\")
: \"/Themes/img/no_avatar.png\";
}
但_httpContextAccessor.HttpContext?.User?.FindFirstValue(ClaimTypes.NameIdentifier) 始终为空
-
准确显示您请求它们的位置,它为空,也将
controller和startup.cs或program.cs文件代码 -
_httpContextAccessor.HttpContext?.User?.Identity.IsAuthenticated返回什么? -
@DimitrisMaragkos 这是错误的
-
您是否将
[Authorize]属性添加到您正在调用的Controller? -
请看新版
标签: asp.net-core .net-core asp.net-identity