在我的项目中,我正在使用存储库模式,所以我想使用我的自己的类而不是ApplicationUser
类。
因此,我相应地自定义了DbContext
类。
这是我的类,我想用它来代替ApplicationUser。
public class AppUser : IdentityUser
{
public string FirstName { get; set; }
public string LastName { get; set; }
public string Email { get; set; }
public string ConfirmationCode { get; set; }
public DateTime ConfirmationCodeSentDate { get; set; }
[Key]
public int Identifier {get;set;}
public DateTime DateCreated { get; set; }
public DateTime LastModified {get; set;}
public bool IsRemoved { get; set;}
}
我的上下文类如下。
public class TestArchDbContext : IdentityDbContext<AppUser>
{
public TestArchDbContext()
: base("TestArchDb")
{
}
public IDbSet<Result> Results { get; set; }
public static TestArchDbContext Create()
{
return new TestArchDbContext();
}
}
现在AccountController 中有GetExternalLogin
方法中的代码
AppUser user = await UserManager.FindAsync(new UserLoginInfo(externalLogin.LoginProvider,
externalLogin.ProviderKey));
ClaimsIdentity oAuthIdentity = await user.GenerateUserIdentityAsync(UserManager,
OAuthDefaults.AuthenticationType);
ClaimsIdentity cookieIdentity = await user.GenerateUserIdentityAsync(UserManager,
CookieAuthenticationDefaults.AuthenticationType);
我得到一个错误,AppUser不包含的定义
GenerateUserIdentityAsync
。
我必须在哪里写这个方法。
我在控制器中添加了一个方法,它解决了我的问题。
public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<AppUser> manager, AppUser user, string authenticationType)
{
var userIdentity = await manager.CreateIdentityAsync(user, authenticationType);
return userIdentity;
}
然后调用这个方法(而不是从AppUser对象调用,而是直接调用它,并传递用户对象
ClaimsIdentity oAuthIdentity = await this.GenerateUserIdentityAsync(UserManager,user,
OAuthDefaults.AuthenticationType);
ClaimsIdentity cookieIdentity = await GenerateUserIdentityAsync(UserManager,user,
CookieAuthenticationDefaults.AuthenticationType);