17

我改用新的 ASP.NET Identity 2。我实际上使用的是 Microsoft ASP.NET Identity Samples 2.0.0-beta2。

谁能告诉我在哪里以及如何修改代码,以便它存储用户的名字和姓氏以及用户详细信息。这现在会成为索赔的一部分吗?如果是,我该如何添加它?

我假设我需要在这里添加它,这是帐户控制器中的注册方法:

        if (ModelState.IsValid)
        {
            var user = new ApplicationUser { UserName = model.Email, Email = model.Email };
            var result = await UserManager.CreateAsync(user, model.Password);
            if (result.Succeeded)
            {
                var code = await UserManager.GenerateEmailConfirmationTokenAsync(user.Id);
                var callbackUrl = Url.Action("ConfirmEmail", "Account", new { userId = user.Id, code = code }, protocol: Request.Url.Scheme);
                await UserManager.SendEmailAsync(user.Id, "Confirm your account", "Please confirm your account by clicking this link: <a href=\"" + callbackUrl + "\">link</a>");
                ViewBag.Link = callbackUrl;
                return View("DisplayEmail");
            }
            AddErrors(result);
        }

另外,如果我确实添加了名字和姓氏,那么它存储在数据库中的什么位置?我是否需要在表格中为这些信息创建一个额外的列?

4

2 回答 2

18

您需要将其添加到您的ApplicationUser课程中,因此如果您使用身份样本,我想您的IdentityModels.cs

public class ApplicationUser : IdentityUser {
    public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<ApplicationUser> 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;
    }
}

添加名字和姓氏后,它看起来像这样:

public class ApplicationUser : IdentityUser {
    public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<ApplicationUser> 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;
    }

    public string FirstName { get; set; }
    public string LastName { get; set; }
}

然后,当您注册用户时,您需要将它们添加到列表中,因为它们是在ApplicationUser类中定义的

var user = new ApplicationUser { UserName = model.Email, Email = model.Email, FirstName = "Jack", LastName = "Daniels" };

AspNetUsers完成迁移后,名字和姓氏最终会出现在表格中

于 2014-04-22T03:32:18.377 回答
13

我意识到这篇文章已经有几年的历史了,但是随着 ASP.NET Core 越来越受欢迎,我最终在这里遇到了类似的问题。接受的答案建议您更新用户数据模型以捕获此数据。我不认为这是一个糟糕的建议,但从我的研究来看,这是存储这些数据的正确方法。请参阅ASP .NET IdentityUser.Identity.Name full name mvc5中的声明是什么。后者由 Microsoft ASP.NET Identity 团队的人员回答。

下面是一个简单的代码示例,展示了如何使用 ASP.NET Identity 添加这些声明:

var claimsToAdd = new List<Claim>() {
    new Claim(ClaimTypes.GivenName, firstName),
    new Claim(ClaimTypes.Surname, lastName)
};

var addClaimsResult = await _userManager.AddClaimsAsync(user, claimsToAdd);
于 2017-03-09T02:14:38.203 回答