我们有这个独特的要求,通过在用户名/电子邮件和密码旁添加额外的“租户代码”来登录MVC ASP.NET应用程序。
我们在下面创建了几个课程:
public class UserProfile
{
public Guid Id { get; set; }
public String FirstName { get; set; }
public String LastName { get; set; }
public String Address { get; set; }
public String Postcode { get; set; }
public String State { get; set; }
public String LandLineNo { get; set; }
public String MobileNo { get; set; }
public Tenant Tenant { get; set; }
}
public class Tenant
{
public Guid Id { get; set; }
public String Code { get; set; }
public String Name { get; set; }
public String Description { get; set; }
public Boolean IsActive { get; set; }
public DateTime CreatedDate { get; set; }
public DateTime LastDateModifiedDate { get; set; }
}
我们在ApplicationUser类中添加了属性:IdentityUser
public virtual UserProfile UserProfile { get; set; }
并在ApplicationDbContext类上添加:IdentityDbContext
public System.Data.Entity.DbSet<UserProfile> UserProfile { get; set; }
我们唯一能想到的是覆盖SignInManager.PasswordSignInAsync就是这样吗?怎么做到这一点?
我很感激你的意见。
由于
答案 0 :(得分:1)
我不认为覆盖PasswordSignInAsync
会有用,因为它的签名不会占用用户实体。它只接管用户名,密码, isPersistent &amp; shouldLockout ,因此您无法访问任何租户信息。如果您尝试检查租户信息,请购买用户名,最终可能会有多个帐户。
我建议在一个派生自SignInManager
的类中创建自己的方法。获取此信息以检查用户和租户信息并致电SignInAsync
或SignInOrTwoFactor
(如果您使用的是2因子身份验证)。
如果您有点迷失,请在您选择的反编译器中查看Microsoft.AspNet.Identity.Owin
程序集,并检查这些方法正在做什么。