如何从AspNetUsers表中获取自定义ID

时间:2014-11-17 14:35:48

标签: c# asp.net

我目前正在开发一个用ASP.NET和C#开发的网站。只需执行返回UserId之类的AspNetUsers即可从User.Identity.GetUserId()表中获取m13t79j0-4p5e-829h-4x10-fyv74k0w2ff6。现在我需要将其更改为自定义UserId,这将是int,所以类似

1
2
3
and so on

IdentityModel我有以下代码指向表自定义表和Id

protected override void OnModelCreating(System.Data.Entity.DbModelBuilder modelBuilder)
    {
        base.OnModelCreating(modelBuilder);

        modelBuilder.Entity<ApplicationUser>().ToTable("CustomTable").Property(p => p.Id).HasColumnName("MyCustomId");
    }

但是当我User.Identity.GetUserId()时,它仍会返回此ID User.Identity.GetUserId()。我是C#和ASP.NET的新手,所以有人能告诉我哪里出错了吗?我是否必须覆盖GetUserId()方法?提前感谢您的所有帮助和支持

3 个答案:

答案 0 :(得分:1)

据我了解,您必须将Asp.Net Identity的AspNetUsers表与您当前的Users表相关联。实现它的一种可能性是在AspNetUsers表中创建一个新列(外键),其中包含来自Users表的当前UserId,如下所示:

protected override void OnModelCreating(System.Data.Entity.DbModelBuilder modelBuilder)
{
    base.OnModelCreating(modelBuilder);

    var applicationUser = modelBuilder.Entity<ApplicationUser>().HasKey(u => u.Id).ToTable("Users", "dbo");
    applicationUser.Property(iu => iu.UserId).HasColumnName("UserId");
    ...

或者只是像你在问题中那样添加一个包含关系的新表。

Web Api

然后,您可以覆盖OnAuthorizationAsync的{​​{1}}方法,并使用AuthorizeAttribute从Db获取您的UserId:

Principal.Identity.GetUserId()

要检测控制器操作的值,请执行以下操作:

public class WebApiAuthorizeAttribute : AuthorizeAttribute
{
    public override async Task OnAuthorizationAsync(HttpActionContext actionContext, CancellationToken cancellationToken)
    {
        base.OnAuthorization(actionContext);

        Guid userId;

        if (actionContext.RequestContext.Principal.Identity.IsAuthenticated
            && Guid.TryParse(actionContext.RequestContext.Principal.Identity.GetUserId(), out userId))
        {
            ApplicationUserManager manager = new ApplicationUserManager(new ApplicationUserStore(new ApplicationDbContext())) { PasswordHasher = new CustomPasswordHasher() };

            ApplicationUser user = await manager.FindByIdAsync(userId);

            actionContext.Request.Properties.Add("MyCustomId", user.MyCustomId);
        }
    }
}

ASP.NET MVC

对于ASP.Net MVC覆盖OnAuthorization而不是OnAuthorizationAsync:

object MyCustomId;
Request.Properties.TryGetValue("MyCustomId", out MyCustomId);

答案 1 :(得分:0)

没有快速解决方法。您要做的是创建自己的自定义UserManager og UserStore。看看这个问题并回答:ASP.NET Identity with EF Database First MVC5

本文将概述ASP.NET身份验证系统的工作原理: http://www.asp.net/identity/overview/extensibility/overview-of-custom-storage-providers-for-aspnet-identity

答案 2 :(得分:0)

尝试:

var curretlyLoggedInUserId = (((System.Security.Claims.ClaimsPrincipal)System.Web.HttpContext.Current.User).Claims).ToList()[0].Value;

这会从ASP的AspNetUsers表中获取ID。