如何覆盖ASP.NET MVC的PasswordInAsync?

时间:2015-03-11 08:56:12

标签: asp.net-mvc

我们有这个独特的要求,通过在用户名/电子邮件和密码旁添加额外的“租户代码”来登录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就是这样吗?怎么做到这一点?

我很感激你的意见。

由于

1 个答案:

答案 0 :(得分:1)

我不认为覆盖PasswordSignInAsync会有用,因为它的签名不会占用用户实体。它只接管用户名密码 isPersistent &amp; shouldLockout ,因此您无法访问任何租户信息。如果您尝试检查租户信息,请购买用户名,最终可能会有多个帐户。

我建议在一个派生自SignInManager的类中创建自己的方法。获取此信息以检查用户和租户信息并致电SignInAsyncSignInOrTwoFactor(如果您使用的是2因子身份验证)。

如果您有点迷失,请在您选择的反编译器中查看Microsoft.AspNet.Identity.Owin程序集,并检查这些方法正在做什么。