Asp.net-core-create-a-user

提供:Dev Guides
移動先:案内検索

ASP.NET Core-ユーザーの作成

この章では、ユーザーの作成方法について説明します。 これを続行するには、Identityフレームワークと対話して、ユーザーが有効であることを確認し、そのユーザーを作成してから、ログインしてログインする必要があります。

  • Identityフレームワークには2つのコアサービスがあります。1つは UserManager で、もう1つは SignInManager です。
  • これらのサービスの両方をコントローラーに注入する必要があります。 これにより、ユーザーの作成またはユーザーのサインインが必要なときに適切なAPIを呼び出すことができます。
  • SignInManagerとUserManagerのプライベート変数を追加してから、AccountControllerにコンストラクターを追加します。コンストラクターは、User型のUserManagerとUser型のSignInManagerの2つのパラメーターを受け取ります。
private SignInManager<User> _signManager;
private UserManager<User> _userManager;

public AccountController(UserManager<User> userManager, SignInManager<User> signManager){
   _userManager = userManager;
   _signManager = signManager;
}
  • AccountControllerのPOSTアクションメソッドを続行します。Postアクション内で常に行う必要がある最初のチェックの1つは、ModelStateが有効かどうかをチェックすることです。
  • ModelStateが有効な場合、ユーザーがユーザー名とパスワードを提供し、パスワードを確認したことがわかります。そうでない場合は、正しい情報を提供するよう依頼する必要があります。
  • 以下に、登録アクションの実装を示します。
[HttpPost]
public async Task<IActionResult> Register(RegisterViewModel model) {
   if (ModelState.IsValid) {
      var user = new User { UserName = model.Username };
      var result = await _userManager.CreateAsync(user, model.Password);

      if (result.Succeeded) {
         await _signManager.SignInAsync(user, false);
         return RedirectToAction("Index", "Home");
      } else {
         foreach (var error in result.Errors) {
            ModelState.AddModelError("", error.Description);
         }
      }
   }
   return View();
}
  • ModelState が有効な場合、Identityフレームワークと通信する必要があります。 また、Userエンティティの新しいインスタンスを作成し、入力 model.Username をU​​serエンティティの UserName プロパティにコピーする必要があります。
  • ただし、ユーザーエンティティにプレーンテキストのパスワードを保存する場所がないため、パスワードをコピーしません。 代わりに、パスワードをIdentityフレームワークに直接渡し、パスワードをハッシュします。
  • したがって、userManagerがあります。 ユーザー名を渡す必要がある* Asyncメソッド*を作成して、そのユーザーのパスワードを保存できるようにします。
  • このAsyncメソッドは、インスタンスが成功したか失敗したかを示す結果を返し、失敗した場合、失敗した理由のいくつかを示します。
  • 結果が成功した場合は、アカウントを作成したばかりのユーザーにサインインしてから、SignInManagerにこのユーザーに署名するように依頼できます。 ここで、ユーザーをホームページにリダイレクトすると、認証されます。
  • 結果が成功しなかった場合、ユーザーにその理由を伝えようとする必要があり、UserManagerから返される結果にはエラーのコレクションがあり、それらを繰り返してそれらのエラーをModelStateに追加できます。 これらのエラーは、検証タグヘルパーなどのタグヘルパーのビューで利用でき、ページに情報を表示します。
  • ModelState.AddModelErrorでは、エラーを特定のフィールドに関連付けるキーを提供できます。 また、空の文字列を使用して、提供されたエラーの説明を追加します。

すべてのファイルを保存してアプリケーションを実行し、 /account/register に移動します。

登録

ユーザー名と非常に簡単な5文字のパスワードを入力してみましょう。

ユーザー名とパスワード

次に、[登録]ボタンをクリックします。

登録ボタン

デフォルトでは、Identityフレームワークはパスワードに関するいくつかのルールを強制しようとします。

パスワードには少なくとも6文字、1文字は小文字、1文字は大文字、1文字の非数字文字が必要です。

これらのエラーがここに表示される理由は、 userManager.CreateAsync の結果から返されるエラーを取得しているページに検証の要約があるためです。

パスワードルールについてもう少し理解したので、十分に複雑なパスワードを作成して、[登録]をクリックしてみましょう。

ユーザー管理

これでホームページが表示されます。 これは、操作が機能したことを意味します。 次に、SQL Serverオブジェクトエクスプローラーに移動します。

サーバーオブジェクトエクスプローラー

*dbo.AspNetUsers* テーブルを右クリックして、 *View Data* を選択します。

DBO AspNetユーザー

これで、ユーザーが正常に作成されたことを確認できます。また、ユーザーテーブルに新しいレコードを表示できます。 また、ハッシュされたパスワード値とユーザー名を確認できます。これは、 mark.upston で登録したユーザー名です。