获取 ASP.NET Core 2 中的用户 ID
Get user id in ASP.NET Core 2
我正在尝试获取 ASP.NET Core 2.1 MVC 项目中的用户 ID。
但是,我只能收到邮件。我几乎可以肯定必须有 1/2 行的方式来获取它(在 ASP.NET MVC 成员中它只是 var loggedInUserId = User.Identity.GetUserId();
到目前为止我试过这样的:
var loggedInUserId = User.Identity.ToString(); // Result = Name (E-mail)
// var loggedInUserId = User.Identity.Name; // Result (E-mail)
&这就是我现在需要的
您需要在控制器中注入依赖项,如下所示:
[Authorize]
public class AccountController: Controller
{
private readonly UserManager<IdentityUser> _userManager;
public AccountController(UserManager<IdentityUser> userManager)
{
_userManager = userManager;
}
}
现在,您可以在该控制器内的任何位置使用以下代码来获取用户详细信息。
var user = await _userManager.FindByEmailAsync(model.EmailID);
现在,您可以使用 user.Id 来获取 userId。
User.Identity.GetUserId()
的旧方法不再存在,但 id 可作为对您的委托人的声明,即 User
。您可以通过多种方式获得它:
第一个也是最简单的方法就是提出声明:
var userId = User.FindFirstValue(ClaimTypes.NameIdentifier);
如果你已经有一个 UserManager<TUser>
的实例(或者想注入一个),那么你可以在上面使用 GetUserId()
方法:
var userId = _userManager.GetUserId(User);
最后,如果你想回到原来的方式,很简单,只需在 ClaimsPrincipal
上添加一个扩展,然后使用上面的第一种方法:
public static class ClaimsPrincipalExtensions
{
public static string GetUserId(this ClaimsPrincipal principal) =>
principal.FindFirstValue(ClaimTypes.NameIdentifier);
}
在Asp.net Core 2.2中,我用下面的代码解决了这个问题。
using Microsoft.AspNetCore.Identity;
var user = await _userManager.FindByEmailAsync(User.Identity.Name);
这样你就可以通过他的邮箱得到用户信息。 User.Identity.Name
将为您提供当前登录用户的电子邮件地址。
我希望这对某人有用。
我正在尝试获取 ASP.NET Core 2.1 MVC 项目中的用户 ID。
但是,我只能收到邮件。我几乎可以肯定必须有 1/2 行的方式来获取它(在 ASP.NET MVC 成员中它只是 var loggedInUserId = User.Identity.GetUserId();
到目前为止我试过这样的:
var loggedInUserId = User.Identity.ToString(); // Result = Name (E-mail)
// var loggedInUserId = User.Identity.Name; // Result (E-mail)
&这就是我现在需要的
您需要在控制器中注入依赖项,如下所示:
[Authorize]
public class AccountController: Controller
{
private readonly UserManager<IdentityUser> _userManager;
public AccountController(UserManager<IdentityUser> userManager)
{
_userManager = userManager;
}
}
现在,您可以在该控制器内的任何位置使用以下代码来获取用户详细信息。
var user = await _userManager.FindByEmailAsync(model.EmailID);
现在,您可以使用 user.Id 来获取 userId。
User.Identity.GetUserId()
的旧方法不再存在,但 id 可作为对您的委托人的声明,即 User
。您可以通过多种方式获得它:
第一个也是最简单的方法就是提出声明:
var userId = User.FindFirstValue(ClaimTypes.NameIdentifier);
如果你已经有一个
UserManager<TUser>
的实例(或者想注入一个),那么你可以在上面使用GetUserId()
方法:var userId = _userManager.GetUserId(User);
最后,如果你想回到原来的方式,很简单,只需在
ClaimsPrincipal
上添加一个扩展,然后使用上面的第一种方法:public static class ClaimsPrincipalExtensions { public static string GetUserId(this ClaimsPrincipal principal) => principal.FindFirstValue(ClaimTypes.NameIdentifier); }
在Asp.net Core 2.2中,我用下面的代码解决了这个问题。
using Microsoft.AspNetCore.Identity;
var user = await _userManager.FindByEmailAsync(User.Identity.Name);
这样你就可以通过他的邮箱得到用户信息。 User.Identity.Name
将为您提供当前登录用户的电子邮件地址。
我希望这对某人有用。