为了获取 MVC5 中当前登录的用户,我们所要做的就是:
using Microsoft.AspNet.Identity;
[Authorize]
public IHttpActionResult DoSomething() {
string currentUserId = User.Identity.GetUserId();
}
现在,对于 ASP.NET Core,我认为这应该可以工作,但它会引发错误。
using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Http;
private readonly UserManager<ApplicationUser> _userManager;
[HttpPost]
[Authorize]
public async Task<IActionResult> StartSession() {
var curUser = await _userManager.GetUserAsync(HttpContext.User);
}
有任何想法吗?
EDIT:Gerardo 的响应已步入正轨,但要获取用户的实际“Id”,这似乎可行:
ClaimsPrincipal currentUser = this.User;
var currentUserID = currentUser.FindFirst(ClaimTypes.NameIdentifier).Value;
如果你的代码是MVC 控制器内部:
public class MyController : Microsoft.AspNetCore.Mvc.Controller
来自Controller
基类,你可以获得ClaimsPrincipal
从User
财产
System.Security.Claims.ClaimsPrincipal currentUser = this.User;
您可以直接检查索赔(无需往返数据库):
bool isAdmin = currentUser.IsInRole("Admin");
var id = _userManager.GetUserId(User); // Get user id:
其他字段可以从数据库的 User 实体中获取:
-
使用依赖注入获取用户管理器
private UserManager<ApplicationUser> _userManager;
//class constructor
public MyController(UserManager<ApplicationUser> userManager)
{
_userManager = userManager;
}
-
并使用它:
var user = await _userManager.GetUserAsync(User);
var email = user.Email;
如果您的代码是服务类,您可以使用依赖注入来获取IHttpContextAccessor
这可以让你得到User
来自 HttpContext。
private IHttpContextAccessor _httpContextAccessor;
public MyClass(IHttpContextAccessor httpContextAccessor)
{
_httpContextAccessor = httpContextAccessor;
}
private void DoSomething()
{
var user = _httpContextAccessor.Context?.User;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)