web-dev-qa-db-ja.com

ユーザーの姓名をASP.NETIdentity 2に追加しますか?

新しいASP.NETIdentity2を使用するように切り替えました。実際にはMicrosoftASP.NET Identity Samples2.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);
        }

また、姓名を追加した場合、これはデータベースのどこに保存されますか?この情報のためにテーブルに追加の列を作成する必要がありますか?

15
user1943020

ApplicationUserクラスに追加する必要があるので、IDサンプルを使用する場合は、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テーブルになります。

15
dima

この投稿は数年前のものだと思いますが、ASP.NET Coreが勢いを増しているため、ここでも同様の質問をすることになりました。受け入れられた回答では、このデータをキャプチャするためにユーザーデータモデルを更新することをお勧めします。それは悪い推奨ではないと思いますが、私の研究によると、このデータを保存する正しい方法であると主張しています。 ASP .NET Identity および ser.Identity.Nameフルネームmvc5 のクレームは何ですか。後者はからの誰かによって回答されますMicrosoftのASP.NETIdentityチーム。

以下は、ASP.NETIdentityを使用してこれらのクレームを追加する方法を示す簡単なコードサンプルです。

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

var addClaimsResult = await _userManager.AddClaimsAsync(user, claimsToAdd);
10