在WebApi中使用自定义类而不是ApplicationUser

时间:2016-04-01 01:28:45

标签: c# asp.net-mvc asp.net-mvc-4 asp.net-web-api asp.net-identity

在我的项目中我使用了存储库模式,因此我想使用自己的类而不是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

我在哪里写这个方法。

1 个答案:

答案 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);