Web API 2 + MVC 5 Share Identity Table

 ̄綄美尐妖づ 提交于 2019-12-08 09:12:02

问题


I have a web API and MVC5 sharing the same Identity Table. The Context belonging to the Web API:

public partial class CrestfineContext: IdentityDbContext<ApplicationUser>
{
    public CrestfineContext():
        base("WelbeckDatabase", throwIfV1Schema: false)
    {

    }

    protected override void OnModelCreating(DbModelBuilder builder)
    {
        builder.Conventions.Remove<PluralizingTableNameConvention>();

        builder.Entity<IdentityUserClaim>().ToTable("UserClaim").HasKey<Int32>(r => r.Id);
        builder.Entity<IdentityUserLogin>().ToTable("UserLogin").HasKey<string>(l => l.UserId);
        builder.Entity<IdentityRole>().ToTable("Role").HasKey<string>(r => r.Id);
        builder.Entity<User>().ToTable("User").HasKey(r => new{ r.IDNumber, r.UserName});
        builder.Entity<IdentityUser>().ToTable("User").HasKey<string>(r => r.UserName);
        builder.Entity<IdentityUserRole>().ToTable("UserRole").HasKey(r => new { r.RoleId, r.UserId });/**/
    }

While the Context belonging to the Web app(MVC 5) is:

public partial class CrestfineContext : IdentityDbContext<UserLogin>
{
    public CrestfineContext()
        : base("name=WelbeckDatabase", throwIfV1Schema: false)
    {
    }

    protected override void OnModelCreating(DbModelBuilder builder)
    {
        builder.Conventions.Remove<PluralizingTableNameConvention>();

        builder.Entity<IdentityUserClaim>().ToTable("UserClaim").HasKey<Int32>(r => r.Id);
        builder.Entity<IdentityUserLogin>().ToTable("UserLogin").HasKey<string>(l => l.UserId);
        builder.Entity<IdentityRole>().ToTable("Role").HasKey<string>(r => r.Id);
        builder.Entity<UserLogin>().ToTable("User").HasKey(r => new { r.IDNumber, r.UserName });
        builder.Entity<IdentityUser>().ToTable("User").HasKey<string>(r => r.UserName);
        builder.Entity<IdentityUserRole>().ToTable("UserRole").HasKey(r => new { r.RoleId, r.UserId });
    }
}

}

The are both running problem is when Signing in to the Web App(MVC):

var userManager = HttpContext.GetOwinContext().GetUserManager<CrestfineManager>();
var authManager = HttpContext.GetOwinContext().Authentication;

UserLogin user = await userManager.FindAsync(login_.Email, login_.Password); 

returns a null... though the same user credentials can be used to login to the web API and the user will get authenticated

EDIT

My User Model for the Web API:

public partial class User : IdentityUser
{
  public string FirstName { get; set; }

  public string LastName { get; set; }

  public string IDNumber { get; set; }

  public string Address { get; set; }

  public DateTime JoinDate { get; set; }
}

While the User Model in my MVC app:

public class UserLogin: IdentityUser
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string IDNumber { get; set; }
    public string Address { get; set; }
    public DateTime JoinDate { get; set; }
}

UPDATE

I have realised that i can't even select data from the IdentityUser table it returns null yet, there are users in the system a simple query :

  var usr = context.Users.Where(x => x.UserName == login_.Email).FirstOrDefault();

returns null. However, I can perform other tasks.

来源:https://stackoverflow.com/questions/49278382/web-api-2-mvc-5-share-identity-table

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!