ネットコアアイデンティティ認証:登録、ログインおよびログアウト(簡単な例)

I.はじめに

  一般的に、我々は、システムが簡単な登録、ログインとログアウトを完了するために、アイデンティティネットコアと、この時間は、自分の身元確認の認証コードのセットを使用します所有しています。

第二に、データベース

  最初は、指定されている、それはアイデンティティの関連証明する必要がありますUserClaimの下など、何のログイン操作がない場合、私は、シンプルかつUserClaim Usersテーブルを構築した、コンテキストを作成することです。

    パブリック クラスDataBaseContext:DbContext 
    { 
        公共 DataBaseContext(DbContextOptions <Da​​taBaseContext> オプション)ベース(オプション)
        {} 
        公共 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)。

 

 

おすすめ

転載: www.cnblogs.com/xwc1996/p/11789052.html