我刚刚开始研究web api 2并尝试着进入。我创建了一个简单的web api 2项目,我想要的是使用我自己的自定义用户存储库进行基于令牌的身份验证。我想使用自己的自定义存储库来获取/更新/创建/删除用户。
我的存储库位于不同的项目中,我想在这里使用它。
public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
{
var userManager = context.OwinContext.GetUserManager<ApplicationUserManager>();
ApplicationUser user = await userManager.FindAsync(context.UserName, context.Password);
if (user == null)
{
context.SetError("invalid_grant", "The user name or password is incorrect.");
return;
}
ClaimsIdentity oAuthIdentity = await user.GenerateUserIdentityAsync(userManager,
OAuthDefaults.AuthenticationType);
ClaimsIdentity cookiesIdentity = await user.GenerateUserIdentityAsync(userManager,
CookieAuthenticationDefaults.AuthenticationType);
AuthenticationProperties properties = CreateProperties(user.UserName);
AuthenticationTicket ticket = new AuthenticationTicket(oAuthIdentity, properties);
context.Validated(ticket);
context.Request.Context.Authentication.SignIn(cookiesIdentity);
}
此时的某些地方userManager.FindAsync
。我如何将我的存储库插入其中
答案 0 :(得分:1)
您可以简单地将其替换为对存储库的调用,而不是使用内置的UserManager
。
var userManager = context.OwinContext.GetUserManager<ApplicationUserManager>();
ApplicationUser user = await userManager.FindAsync(context.UserName, context.Password);
可以更改以从存储库中获取用户。如下所示:
var userRepository = new UserRepository();
ApplicationUser = await userRepository.GetUserByUserNameAndPasswordAsync(context.UserName, context.Password);`
我可能会坚持使用UserManager
并让它做到这一点。您可以使用所需的属性扩展ApplicationUser
,甚至可以创建一个UserRepository,它可以从与UserManager相同的表中加载其数据。
如果您正在使用实体框架,则只需在DbSet<ApplicationUser> Users { get; set; }
课程中公开DbContext
。