如何使用我的数据库表等用户表与ASP.NET标识?

时间:2015-04-19 23:03:10

标签: sql asp.net asp.net-mvc

我有以下表格:

用户,群组,群组用户

我的课程如下:

public class User
{
   List<int> GroupIds;
}

我的数据访问层中有一个方法,它使用所有组ID列表成功登录后返回用户。我如何覆盖或执行类似的东西来获取该方法的信息?

我在互联网上搜索了很多,观看了YouTube教程,但没有人真正按照我需要的方式解释它。任何人都可以帮忙吗?

3 个答案:

答案 0 :(得分:1)

首先,使用基于声明的安全性而不是基于角色:http://visualstudiomagazine.com/articles/2013/08/01/leveraging-claims-based-security-in-aspnet-45.aspx

我还改编了现有的基于SQL的登录系统,以便使用身份管理。您将要完成的大部分工作都在IdentityModel.cs中。具体如何定义ApplicationUser

public class ApplicationUser : IdentityUser<string, ApplicationUserLogin, ApplicationUserRole, ApplicationUserClaim>
{
    public async Task<ClaimsIdentity> GenerateUserIdentityAsync(ApplicationUserManager manager)
    {
        // Note the authenticationType must match the one defined in CookieAuthenticationOptions.AuthenticationType
        var userIdentity = await manager.CreateIdentityAsync(this, DefaultAuthenticationTypes.ApplicationCookie);
        // Add custom user claims here
        return userIdentity;
    }
}

我已经覆盖了IdentityUser基类的所有4个类型参数以供我实现,您可能不需要这样做,取决于您的改进与Identity期望的方式有多么不同。

您最有可能必须自定义内容的另一个主要位置是ApplicationDbContext,您必须在其中设置用户,组和声明/角色定义与SQL所在的位置。

我发现这些关于typecastexception的文章非常有用:

http://typecastexception.com/post/2014/04/20/ASPNET-MVC-and-Identity-20-Understanding-the-Basics.aspx

http://typecastexception.com/post/2014/06/22/ASPNET-Identity-20-Customizing-Users-and-Roles.aspx

http://typecastexception.com/post/2014/04/20/ASPNET-Identity-20-Setting-Up-Account-Validation-and-Two-Factor-Authorization.aspx

http://typecastexception.com/post/2014/07/13/ASPNET-Identity-20-Extending-Identity-Models-and-Using-Integer-Keys-Instead-of-Strings.aspx

总的来说,在你弄清楚你可以利用哪些身份以及你需要插入你自己的代码的过程中会有很多试验和错误。

如果您的密码未存储,您可能遇到的其他问题是必须提供您自己的PasswordHasher实现并将其插入:

Asp.net Identity password hashing

答案 1 :(得分:0)

我做了&#39;得到你的问题,如果你想覆盖你必须将方法标记为虚拟并继承这样的类:

public class User
{
  public virtual void YourMethod()
  {
  }
}

public class YourClass : User
{
  public override void YourMethod()
  {
  }
}

如果你想分开这个类来添加更多的方法,你可以这样:

partial class User
{
    public static void YourMethod()
    {

    }
}

答案 2 :(得分:0)

创建UserInfo对象

public class ApplicationUser : IdentityUser
{
    public virtual UserInfo UserInfo { get; set; }
}

public class UserInfo : ComparableEntity
{
    public string Email { get; set; }
    public string FullName { get; set; }
    public string KidName { get; set; }
    public string MobilePhone { get; set; }
}

然后创建数据库上下文

public class DatabaseContext : IdentityDbContext<ApplicationUser>, IDatabaseContext
{
    public IDbSet<UserInfo> UserInfos { get; set; }
}