この質問の答えを展開する: ASP.NET Core Identity UIでルーティングを変更しますか?
Javierは、URLをカスタマイズする場合、次のオプションのいずれかをお勧めします。
- デフォルトUIのscaffolding要素を使用して、必要なカスタマイズをすべて自分で行います。
- 古いルートを新しいルートにポイントするリダイレクトルールを使用します。
- デフォルトUIをまったく使用しないでください。
認証:個別のユーザーアカウントが設定された新しいASP.NET Core 2.1 MVCプロジェクトから、デフォルトUIを使用しない方法を教えてください。 Identity Coreとともにデフォルトでインストールされるようです。
プロジェクトが作成された後、デフォルトUIカミソリページを削除し、引き続きIdentity Coreを使用する方法は何ですか?
/Identity/
エリアを削除して、代わりに独自のAccountController
を作成できますか?
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>();
_
solution、AddDefaultIdentity
をAddIdentity
に戻す場合、デフォルトを上書きできます。 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...
}
_
また、必要に応じて、ApplicationUser
とIdentityRole
の両方を独自のクラスに置き換えてください。
2)ASP.NET Core 2.1プロジェクトにデフォルトで付属していたIdentityのAreaフォルダーを削除します。
3)プロジェクト作成ウィンドウで_Individual User Account
_認証を選択して、新しい「ASP.NET Core 2.0」プロジェクト(「2.1」ではない)を作成します。
4)AccountController
とManageController
を、対応するViewModels
とViews
とともに2.0プロジェクトからASP.NET Core 2.1プロジェクトにコピーします。
上記を行うと、私はこれまでのところ問題に遭遇していません。
最初の答えを支持しました。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?}");
少し遅れましたが、もっと簡単な方法があります。新しい足場を追加して、すべてをオーバーライドできます。この記事をご覧ください ここにリンクの説明を入力してください