要在MVC5中获取当前登录的用户,我们所要做的就是:
using Microsoft.AspNet.Identity;
[Authorize]
public IHttpActionResult DoSomething() {
string currentUserId = User.Identity.GetUserId();
}
现在,对于ASP.NET核心,我认为这应该可以工作,但它抛出了一个错误。
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);
}
有什么想法吗?
编辑:Gerardo的响应正在进行中,但是为了获得用户的实际"Id“,这似乎是可行的:
ClaimsPrincipal currentUser = this.User;
var currentUserID = currentUser.FindFirst(ClaimTypes.NameIdentifier).Value;
发布于 2016-08-04 03:11:12
如果您的代码是MVC控制器中的:
public class MyController : Microsoft.AspNetCore.Mvc.Controller
在Controller
基类中,可以从User
属性中获取ClaimsPrincipal
System.Security.Claims.ClaimsPrincipal currentUser = this.User;
您可以直接检查索赔(无需往返到数据库):
bool isAdmin = currentUser.IsInRole("Admin");
var id = _userManager.GetUserId(User); // Get user id:
其他字段可以从数据库的用户实体中获取:
私有UserManager _userManager;//类构造函数公共MyController(UserManager userManager) { _userManager = userManager;}
var _userManager.GetUserAsync=等待电子邮件(用户);var电子邮件= user.Email;
如果您的代码是一个服务类,那么您可以使用依赖项注入来获取一个IHttpContextAccessor
,该User
允许您从HttpContext中获取该a。
private IHttpContextAccessor _httpContextAccessor;
public MyClass(IHttpContextAccessor httpContextAccessor)
{
_httpContextAccessor = httpContextAccessor;
}
private void DoSomething()
{
var user = _httpContextAccessor.Context?.User;
}
发布于 2018-02-03 04:53:08
如果您使用的是轴承令牌身份验证,则以上示例不会返回应用程序用户。
取而代之的是,使用这个:
ClaimsPrincipal currentUser = this.User;
var currentUserName = currentUser.FindFirst(ClaimTypes.NameIdentifier).Value;
ApplicationUser user = await _userManager.FindByNameAsync(currentUserName);
这在apsnetcore 2.0中有效。在早期版本中没有尝试过。
发布于 2018-05-12 04:15:29
对于上下文,我使用ASP.NET Core2Web应用程序模板创建了一个项目。然后,选择Web应用程序(MVC),然后单击Change Authentication按钮并选择单个用户帐户。
这个模板为您构建了大量的基础设施。在控制器文件夹中找到ManageController
。
此ManageController
类构造函数需要填充此UserManager变量:
private readonly UserManager<ApplicationUser> _userManager;
然后,看看这个类中的HttpPost索引方法。它们以这种方式获取当前用户:
var user = await _userManager.GetUserAsync(User);
作为额外的说明,这是您想要将任何自定义字段更新到已添加到AspNetUsers表中的用户配置文件的地方。将字段添加到视图中,然后将这些值提交给IndexViewModel,然后将其提交给此Post方法。我在默认逻辑之后添加了以下代码来设置电子邮件地址和电话号码:
user.FirstName = model.FirstName;
user.LastName = model.LastName;
user.Address1 = model.Address1;
user.Address2 = model.Address2;
user.City = model.City;
user.State = model.State;
user.Zip = model.Zip;
user.Company = model.Company;
user.Country = model.Country;
user.SetDisplayName();
user.SetProfileID();
_dbContext.Attach(user).State = EntityState.Modified;
_dbContext.SaveChanges();
https://stackoverflow.com/questions/38751616
复制相似问题