在我的项目中我使用了存储库模式,因此我想使用自己的类而不是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
。
我在哪里写这个方法。
答案 0 :(得分:0)
我在控制器中添加了一个方法,它解决了我的问题。
public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<AppUser> manager, AppUser user, string authenticationType)
{
var userIdentity = await manager.CreateIdentityAsync(user, authenticationType);
return userIdentity;
}
然后调用此方法(而不是从AppUser对象调用,直接调用它,并传递用户Object。
ClaimsIdentity oAuthIdentity = await this.GenerateUserIdentityAsync(UserManager,user,
OAuthDefaults.AuthenticationType);
ClaimsIdentity cookieIdentity = await GenerateUserIdentityAsync(UserManager,user,
CookieAuthenticationDefaults.AuthenticationType);