UserManager<T>
类不开箱,你必须自己定义它。您可以使用默认实现,或者根据需要定义自己的类。
例如:
MyUserStore.cs
这就是用户来自(例如DB),并在那里你可以从任何ClaimsPrincipal
检索要求自己的用户。
public class MyUserStore: IUserStore<MyUser>, IQueryableUserStore<MyUser>
{
// critical method to bridge between HttpContext.User and your MyUser class
public async Task<MyUser> FindByIdAsync(string userId, CancellationToken cancellationToken)
{
// that userId comes from the ClaimsPrincipal (HttpContext.User)
var user = _users.Find(userId);
return await Task.FromResult(user);
}
}
Startup.cs
public void ConfigureServices(IServiceCollection services)
{
// you'll need both a user and a role class. You can also implement a RoleStore if needed
services
.AddIdentity<MyUser, MyRole>()
.AddUserStore<MyUserStore>();
services.Configure<IdentityOptions>(options =>
{
// This claim will be used as userId in MyUserStore.FindByIdAsync
options.ClaimsIdentity.UserIdClaimType = ClaimTypes.Name;
});
}
的.cs myController的
然后,在你的控制器,你可以访问UserManager<MyUser>
类:
public class MyController : Controller
{
private readonly UserManager<User> _userManager;
public MyController(UserManager<User> userManager)
{
_userManager = userManager;
}
[HttpGet("whatever")]
public async Task<IActionResult> GetWhatever()
{
// this will get your user from the UserStore,
// based on the ClaimsIdentity.UserIdClaimType from the ClaimsPrincipal
MyUser myUser = await _userManager.GetUserAsync(User);
}
}