8
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

ASP.NET Core Identity でユーザー名を日本語対応させる

Posted at

背景

ASP.NET Core Identity を使用するとユーザー認証が簡単にできる。
デフォルトではEmailとパスワードを登録するだけだった。
それにユーザー名を加えたところ日本語対応していなかった。。。
error.png

解決策

デフォルトで使用できる文字は以下の通り

options.User.AllowedUserNameCharacters =
    "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-._@+";

ユーザー名を日本語対応させるために Startup.cs 内で options.User.AllowedUserNameCharacters = null; に変更する。

Startup.cs
public void ConfigureServices(IServiceCollection services)
{
    // .....
    services.Configure<IdentityOptions>(options =>
    {
        // User settings.
        options.User.AllowedUserNameCharacters = null; // null か "" で日本語にも対応する
    });
}

参考

ASP.NET Core Identity使い方

Visual Studioでwebアプリケーションを作成する際に認証を追加するだけ。
1.png

コンソールで以下のコマンド実行

PM> Update-Database

ビルドすると登録、ログイン画面が出来ている。
register.png

登録画面にユーザー名追加

プロジェクトで右クリック→追加→新規スキャフォールディングアイテムの追加→IDを追加
Account/Registerを選択して追加
id.png

Areas\Identity\Pages\Account\Register.cshtml にユーザー名入力フォームを追加

Register.cshtml
<div class="row">
    <div class="col-md-4">
        <form asp-route-returnUrl="@Model.ReturnUrl" method="post">
            <h4>Create a new account.</h4>
            <hr />
            <div asp-validation-summary="All" class="text-danger"></div>
            @*UserName入力*@
            <div class="form-group">
                <label asp-for="Input.UserName"></label>
                <input asp-for="Input.UserName" class="form-control" />
                <span asp-validation-for="Input.UserName" class="text-danger"></span>
            </div>
            <div class="form-group">
                <label asp-for="Input.Email"></label>
                <input asp-for="Input.Email" class="form-control" />
                <span asp-validation-for="Input.Email" class="text-danger"></span>
            </div>
            ...

Areas\Identity\Pages\Account\Register.cshtml.cs でユーザー名にはEmailが登録されていたので変更する。

Register.cshtml.cs

    public class RegisterModel : PageModel
    {
        //...
        public class InputModel
        {
            // UserName 追加
            [Required]
            [Display(Name = "UserName")]
            public string UserName { get; set; }

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

        public async Task<IActionResult> OnPostAsync(string returnUrl = null)
        {
            returnUrl = returnUrl ?? Url.Content("~/");
            ExternalLogins = (await _signInManager.GetExternalAuthenticationSchemesAsync()).ToList();
            if (ModelState.IsValid)
            {
                // UserName = Input.Email -> Input.UserName に変更
                var user = new IdentityUser { UserName = Input.UserName, Email = Input.Email };
                var result = await _userManager.CreateAsync(user, Input.Password);
                //...
            }
        }
    }
8
7
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?