问题
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