4

我正在构建一个Web API (2)项目并使用"individual account" authentication. 我想要

  1. 用一些细节扩展用户(比如名字/姓氏等) (in model)
  2. 登录后获取该信息(在客户端 - 我的案例 Windows 手机)

我刚刚开始学习MVCWeb API所以有人可以帮助我吗?

让我稍微解释一下:我创建了 webapi 项目并选择了身份验证方法 - “个人帐户”,我添加了一个名为 Person 的模型类,它有 2 个字段:FirstName 和 LastName。好吧,我已经使用提琴手注册了一个名为“johndoe”的用户,并使用了密码。在此之后,我使用提琴手在“服务器:端口/令牌”验证此用户并获得不记名令牌。那么这里有一个问题,我需要知道如何将这个用户类与我在模型中的 Person 类关联起来,其次我不知道如何编写一个控制器,所以什么时候发送一个 get 请求,我们的控制器函数将返回关联的 Person。

4

1 回答 1

11

一,如:ASP.NET Identity简介

默认情况下,ASP.NET Identity 系统将所有用户信息存储在数据库中。ASP.NET Identity 使用 Entity Framework Code First 来实现其所有的持久性机制。

现在,IdentityUser 类将映射到数据库中的 AspNetUsers 表,因此让我们通过创建一个继承自它的新类并添加我们的自定义属性来扩展它:

public class CustomUser : IdentityUser
{
    public string Email { get; set; }
}

然后你应该让 UserManager 类使用 CustomUser 而不是 IdentityUser 类,所以在 Startup.cs 中,将 UserManager 和 UserStore 的泛型类型更改为:

UserManagerFactory = () => new UserManager<CustomUser>(new UserStore<CustomUser>());

还有财产:

public static Func<UserManager<CustomUser>> UserManagerFactory { get; set; }

在 ApplicationOAuthProvider.cs 和解决方案中的任何地方,对 UserManager 的泛型类型进行相同的更改,并开始使用 CustomUser 而不是 IdentityUser 。您可以将新的“电子邮件”属性添加到 RegisterBindingModel,如下所示:

public class RegisterBindingModel
{
    [Required]
    [Display(Name = "User name")]
    public string UserName { 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; }

    public string Email { get; set; }
}

然后在注册时,您可以添加价值:

 CustomUser user = new CustomUser
        {
            UserName = model.UserName,
            Email=model.Email
        };

我希望它会有所帮助

更新

如果有人收到 ExceptionMessage “无效的列名‘鉴别器’。” 这意味着在按照我的步骤之前已经创建了“AspNetUsers”,并且该表没有“Discriminator”列,所以你应该做的就是进入数据库,通过添加一个新的类型来更改 AspNetUsers 表的设计作为 nvarchar(128)(在我的示例中还添加一个您想要的新列,例如 Email),并将其命名为 Discriminator ,并且不要忘记用适当的值填充旧记录的此列的字段(在我的例如它将是 CustomUser)。

于 2013-11-29T18:55:13.850 回答