I.はじめに
一般的に、我々は、システムが簡単な登録、ログインとログアウトを完了するために、アイデンティティネットコアと、この時間は、自分の身元確認の認証コードのセットを使用します所有しています。
第二に、データベース
最初は、指定されている、それはアイデンティティの関連証明する必要がありますUserClaimの下など、何のログイン操作がない場合、私は、シンプルかつUserClaim Usersテーブルを構築した、コンテキストを作成することです。
パブリック クラスDataBaseContext:DbContext { 公共 DataBaseContext(DbContextOptions <DataBaseContext> オプション) :ベース(オプション) {} 公共 DbSet <ユーザー>ユーザー{ 得ます。セット; } 公共 DbSet <IdentityUserClaim < ストリング >> UserClaim { 得ます。セット; } } パブリック クラスユーザー:IdentityUser { 公共の 文字列企業ID { 取得します。セット; } パブリック 文字列#パスワード{ GET。セット; } }
ここでは、ユーザーは、我々は再び私たちのUserクラスのフィールドを拡張することができるようになどのUserName、として、基になるフィールドの多くを使用するにIdentityUser、IdentityUserを継承しています。
初期化してから更新するデータベースの初期化コンソールテーブルを生成し、移行を追加します。
三、スタートアップ登録サービス
次のようにConfigureServicesに登録
1、コンテキストデータベースに接続されています
// データベース接続を追加 services.AddDbContext <A DatabaseContext is>(=オプション> options.UseSqlServer(Configuration.GetConnectionString(" DefaultConnectionをします")));
2、体験を提供するためにクッキーのデフォルトのUIを含むロゴ、およびアイデンティティトークンを追加し、ユーザーのgetユーザー情報を作成するために、リレーショナル・データベースのためのEntity Frameworkの身元情報ストレージの実装を追加します。AddDefaultIdentity同等AddIdentity、AddDefaultUIのAddDefaultTokenProvidersと3。ユーザーはIdentityUser使用AddEntityFrameworkStoresエラーを継承していない場合。
。services.AddDefaultIdentity <ユーザ>()AddEntityFrameworkStores <DataBaseContext>();
図3は、アイデンティティのオプションを追加し、そうでパスワードの長さの強さ、文字の使用、誤ったパスワードの数とを設定することができます。
services.Configure <IdentityOptions>(オプション=> { // 密码设置 options.Password.RequireDigit = 偽; options.Password.RequireLowercase = 偽; options.Password.RequireNonAlphanumeric = 偽; options.Password.RequireUppercase = 偽; options.Password .RequiredLength = 1 ; options.Password.RequiredUniqueChars = 1 ; // 锁定设置 options.Lockout.DefaultLockoutTimeSpan = TimeSpan.FromMinutes(5); options.Lockout.MaxFailedAccessAttempts = 5 ; options.Lockout.AllowedForNewUsers = 真; // 用户设置 options.User.AllowedUserNameCharacters = " abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-._@+ " 。 options.User.RequireUniqueEmail = 偽; });
図4に示すように、アプリケーションのクッキー構成
services.ConfigureApplicationCookie(オプション=> { // クッキー设置 options.Cookie.HttpOnly = 真; options.ExpireTimeSpan = TimeSpan.FromMinutes(5 ); options.LoginPath = " /ログイン/インデックス" ; options.AccessDeniedPath = " /ホーム/インデックス" ; options.SlidingExpiration = 真; });
Configで認証をサインアップ
app.UseAuthentication();
第四に、簡単なログイン、登録と登録解除
それは単純な例ですので、私は実際にどのように単純なコードにどのようにもありません少なかったです。
ホームコントローラーを作成して追加するための[オーソライズ]の特性、それはすべてアクセス不能に証明されていません。Startup.csのUserManager依存上記によれば、そのような彼女のように、ユーザ登録を管理するために使用され、注入されました。
[承認] パブリック クラスにHomeController:コントローラ { プライベートのUserManager <ユーザー> のUserManager。公的にHomeController(のUserManager <ユーザー> _userManager ) { のUserManager = _userManager。 } パブリック 非同期タスク<IActionResult> インデックス() { VAR RES = のawait userManager.GetUserAsync(HttpContext.User)。 リターンビュー(); } }
そして、Loginコントロールを作成し、我々は内部の中にログを書き込むと、登録の取消の方法することができます。加えて、ユーザのログイン、ログアウト及び他の操作に使用され、コントローラのUserManagerログイン注射SignManager、。
パブリック クラスLoginController:コントローラ { // ユーザ情報の永続的なストレージを提供するための 専用のUserManager <ユーザー> 'のUserManagerを'; プライベート SignInManager <ユーザー> signManager; 公共 LoginController(のUserManager <ユーザー> _userManager、SignInManager <ユーザー> _signManager) { 'のUserManager' = _userManager ; signManager = _signManager; } }
1、登録
CreateAsync方法で登録し、ユーザーは自動的にデータベースに直接作成されます。ちょうどすぐ登録しログインするためのユーザーのためのSignInAsync方法。
パブリック 非同期タスク<IActionResult> レジスタ() { VARのユーザ= 新しいユーザー(){ユーザー名= " XU2 "、のPhoneNumber = " 123 "、企業ID = " 1 " }。 VaRの結果= のawait userManager.CreateAsync(ユーザ、" 123 " )。 await signManager.SignInAsync(ユーザー、真の); もし(result.Succeeded) リターンリダイレクト(" /ホーム/インデックス"); リターンリダイレクト(" /ログイン/インデックス" ); }
2、ログ
ログインはPasswordSignInAsyncを使用するSignInAsync、およびパスワードを使用することはできません
パブリック 非同期タスク<IActionResult> インデックス() { VAR S =を待つ signManager.PasswordSignInAsyncを(" 徐"、" 123 "、真、偽)。 リターンビュー(); }
3、ログオフ
パブリック 非同期タスク<IActionResult> ログアウト() { のawait signManager.SignOutAsync()。 リターンビュー(); }
現在の取得4.ログオンしているユーザー
VAR RES = のawait userManager.GetUserAsync(HttpContext.User)。