web-dev-qa-db-ja.com

ASP.NET Core 2.1 Identity:デフォルトのUIカミソリページを削除する方法

この質問の答えを展開する: ASP.NET Core Identity UIでルーティングを変更しますか?

Javierは、URLをカスタマイズする場合、次のオプションのいずれかをお勧めします。

  • デフォルトUIのscaffolding要素を使用して、必要なカスタマイズをすべて自分で行います。
  • 古いルートを新しいルートにポイントするリダイレクトルールを使用します。
  • デフォルトUIをまったく使用しないでください。

認証:個別のユーザーアカウントが設定された新しいASP.NET Core 2.1 MVCプロジェクトから、デフォルトUIを使用しない方法を教えてください。 Identity Coreとともにデフォルトでインストールされるようです。

enter image description here

プロジェクトが作成された後、デフォルトUIカミソリページを削除し、引き続きIdentity Coreを使用する方法は何ですか?

/Identity/エリアを削除して、代わりに独自のAccountControllerを作成できますか?

17
Wellspring

Panagiotis Kanavosによってリンクされた記事 を使用して、解決策に到達することができました。

ASP.NET Core 2.1.0-preview1には、.AddDefaultUI()という行があり、_Startup.cs_に含める必要はありませんでした。

_services.AddIdentity<IdentityUser, IdentityRole>(options => options.Stores.MaxLengthForKeys = 128)
    .AddEntityFrameworkStores<ApplicationDbContext>()
    .AddDefaultUI()
    .AddDefaultTokenProviders();
_

ただし、Core 2.1の最終リリースバージョンでは、同じセクションが次のように簡略化されました。

_services.AddDefaultIdentity<IdentityUser>()
    .AddEntityFrameworkStores<ApplicationDbContext>();
_

solutionAddDefaultIdentityAddIdentityに戻す場合、デフォルトを上書きできます。 I.E. .AddDefaultUI()を含めないでください(また、UIを足場にしないでください)。独自のコードを作成できます。

_services.AddIdentity<IdentityUser, IdentityRole>(options => options.Stores.MaxLengthForKeys = 128)
    .AddEntityFrameworkStores<ApplicationDbContext>()
    // .AddDefaultUI()
    .AddDefaultTokenProviders();
_

次に、_/Areas/Identity/_フォルダーを削除しても安全だと思いますが、100%ではありません

更新:

最終的な解決策を詳しく説明するために回答を整理し、ASP.NET Core 2.1に付属している代わりにMVCを使用するデフォルトのアイデンティティUIかみそりページを削除しました。

1)_Startup.cs_で、

_    public void ConfigureServices(IServiceCollection services)
    {
        // Unrelated stuff commented out...

        // BEGIN: Identity Setup (Overrides default identity)
        services.AddIdentity<ApplicationUser, IdentityRole>(options => options.Stores.MaxLengthForKeys = 128)
            .AddEntityFrameworkStores<ApplicationDbContext>()
            .AddDefaultTokenProviders();
        // END: Identity Setup

        services.Configure<IdentityOptions>(options =>
        {
            // Set your identity Settings here (password length, etc.)
        });

        // More unrelated stuff commented out...

        services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);

        // Added after AddMvc()
        services.ConfigureApplicationCookie(options =>
        {
            options.LoginPath = $"/account/login";
            options.LogoutPath = $"/account/logout";
            options.AccessDeniedPath = $"/account/access-denied";
        });

        // More unrelated stuff commented out...
    }
_

また、必要に応じて、ApplicationUserIdentityRoleの両方を独自のクラスに置き換えてください。

2)ASP.NET Core 2.1プロジェクトにデフォルトで付属していたIdentityのAreaフォルダーを削除します。

3)プロジェクト作成ウィンドウで_Individual User Account_認証を選択して、新しい「ASP.NET Core 2.0」プロジェクト(「2.1」ではない)を作成します。

4)AccountControllerManageControllerを、対応するViewModelsViewsとともに2.0プロジェクトからASP.NET Core 2.1プロジェクトにコピーします。

上記を行うと、私はこれまでのところ問題に遭遇していません。

19
Wellspring

最初の答えを支持しました。90%がそこに来て、残りを配りたかったからです(コメントを入れるには少し長すぎました)。したがって、デフォルトのテンプレートのヘッダーを使用している場合は共有フォルダーを指しているため、/ Areas/Identity /フォルダーを保持する必要があります。そうでない場合は削除します。バックエンドは引き続きIdentity/Account/Register/を指すため、Accountというコントローラーを作成し、Accountというビューにフォルダーを作成し、Register.cshtmlを配置します。カスタマイズするためのテンプレートとして使用できるデバッガーウィンドウから元のhtmlを取得しました。 Register.cshtml内に配置します。

<div class="container body-content">


<h2>Register</h2>

<div class="row">
    <div class="col-md-4">
        <form method="post" action="/Identity/Account/Register" novalidate="novalidate">
            <h4>Create a new account.</h4>
            <hr>
            <div class="text-danger validation-summary-valid" data-valmsg-summary="true"><ul><li style="display:none"></li>
</ul></div>
            <div class="form-group">
                <label for="Input_Email">Email</label>
                <input class="form-control" type="email" data-val="true" data-val-email="The Email field is not a valid e-mail address." data-val-required="The Email field is required." id="Input_Email" name="Input.Email" value="">
                <span class="text-danger field-validation-valid" data-valmsg-for="Input.Email" data-valmsg-replace="true"></span>
            </div>
            <div class="form-group">
                <label for="Input_Password">Password</label>
                <input class="form-control" type="password" data-val="true" data-val-length="The Password must be at least 6 and at max 100 characters long." data-val-length-max="100" data-val-length-min="6" data-val-required="The Password field is required." id="Input_Password" name="Input.Password">
                <span class="text-danger field-validation-valid" data-valmsg-for="Input.Password" data-valmsg-replace="true"></span>
            </div>
            <div class="form-group">
                <label for="Input_ConfirmPassword">Confirm password</label>
                <input class="form-control" type="password" data-val="true" data-val-equalto="The password and confirmation password do not match." data-val-equalto-other="*.Password" id="Input_ConfirmPassword" name="Input.ConfirmPassword">
                <span class="text-danger field-validation-valid" data-valmsg-for="Input.ConfirmPassword" data-valmsg-replace="true"></span>
            </div>
            <button type="submit" class="btn btn-default">Register</button>
        <input name="__RequestVerificationToken" type="hidden" value="CfDJ8IWbPHM_NTJDv_7HGewWzbbRveP09yQOznYdTWL2aN5X_4_eVbNE1w8D_qz7zegloVtdAhuVOJbJLQo0ja73FB3PgYycyGpn-DfX3fJqv4Cx8ns6Ygh6M7nMxV0eozO7hoDxUfPwrIJb2RcFtyzhPpMevZ4P0M8aVyBP55SP-5C4l23dCtDXXUOAY_YLwt67dw"></form>
    </div>
</div>


        <hr>
        <footer>
            <p>© 2018 - SqlServerApp</p>
        </footer>
    </div> 

他の答えが言うように、スタートアップを変更します:

services.AddIdentity<IdentityUser, IdentityRole>(options => options.Stores.MaxLengthForKeys = 128)
    .AddEntityFrameworkStores<ApplicationDbContext>()
    // .AddDefaultUI()
    .AddDefaultTokenProviders();

また、同じStartup.csファイルを使用してコントローラーへのルートを作成し、そこにある他のルートを保持する必要があります。

app.UseMvc(routes =>
        {
            routes.MapRoute(
                name: "identity",
                template: "Identity/{controller=Account}/{action=Register}/{id?}");
2
Ryan Dines

少し遅れましたが、もっと簡単な方法があります。新しい足場を追加して、すべてをオーバーライドできます。この記事をご覧ください ここにリンクの説明を入力してください

1
hivie7510