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);
}
}