2015-02-11 80 views
0

我已经创建一个新项目,并转换我的代码使用和整数ID而不是一个GUID的遵循本指南:返回自定义用户数据MVC5 ASP.NET身份

http://www.asp.net/identity/overview/extensibility/change-primary-key-for-users-in-aspnet-identity#mvcupdate3

现在我想添加我的用户的一些自定义字段,如FirstName。

我RegisterViewModel:

public class RegisterViewModel 
{ 
    [Required] 
    [Display(Name = "First Name")] 
    public string FirstName { get; set; } 

    [Required] 
    [EmailAddress] 
    [Display(Name = "Email")] 
    public string Email { get; set; } 

    [Required] 
    [StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 6)] 
    [DataType(DataType.Password)] 
    [Display(Name = "Password")] 
    public string Password { get; set; } 

    [DataType(DataType.Password)] 
    [Display(Name = "Confirm password")] 
    [Compare("Password", ErrorMessage = "The password and confirmation password do not match.")] 
    public string ConfirmPassword { get; set; } 
} 

这工作,我的名字被永久保存到数据库中。我的问题是我无法检索它,我不确定我做错了什么。

这是我IdentityModels.cs

// You can add profile data for the user by adding more properties to your ApplicationUser class, please visit http://go.microsoft.com/fwlink/?LinkID=317594 to learn more. 
public class ApplicationUser : IdentityUser<int, CustomUserLogin, CustomUserRole, CustomUserClaim> 
{ 
    public string FirstName { get; set; } 

    public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<ApplicationUser, int> 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 
     userIdentity.AddClaim(new Claim("FirstName", this.FirstName)); 
     return userIdentity; 
    } 
} 


public class ApplicationDbContext : IdentityDbContext<ApplicationUser, CustomRole, int, CustomUserLogin, CustomUserRole, CustomUserClaim> 
{ 
    public ApplicationDbContext() 
     : base("DefaultConnection") 
    { 
    } 

    public static ApplicationDbContext Create() 
    { 
     return new ApplicationDbContext(); 
    } 
} 

public class CustomUserRole : IdentityUserRole<int> { } 
public class CustomUserClaim : IdentityUserClaim<int> { } 
public class CustomUserLogin : IdentityUserLogin<int> { } 

public class CustomRole : IdentityRole<int, CustomUserRole> 
{ 
    public CustomRole() { } 
    public CustomRole(string name) { Name = name; } 
} 

public class CustomUserStore : UserStore<ApplicationUser, CustomRole, int, CustomUserLogin, CustomUserRole, CustomUserClaim> 
{ 
    public CustomUserStore(ApplicationDbContext context) 
     : base(context) 
    { 
    } 
} 

public class CustomRoleStore : RoleStore<CustomRole, int, CustomUserRole> 
{ 
    public CustomRoleStore(ApplicationDbContext context) 
     : base(context) 
    { 
    } 
} 

user.FirstName总是空。

谢谢

+0

显示你如何试图访问'user.FirstName'? – trailmax 2015-02-12 09:53:40

+0

在GenerateUserIdentityAsync方法中: var user = await manager.FindByEmailAsync(userIdentity.Name); userIdentity.AddClaim(new Claim(“FirstName”,user.FirstName)); – Cooper 2015-02-12 13:58:28

+2

您确定'user.FirstName'为null,并且'user'不为null?如果从数据库加载整个用户,并且FirstName存储在该数据库中,则应该没有问题。显示从数据库加载用户的示例代码。 – 2015-02-12 14:45:48

回答

0

我的代码确实工作我只是愚蠢的。真的,真的很愚蠢。感谢Mateusz确认我的代码应该工作。