如何删除默认 ASP.NET Core Identity 端点?
How to remove default ASP.NET Core Identity endpoints?
假设我想编写自己的登录、注销端点及其视图
但出于某种原因,我很难删除现有端点
每当我删除可能与这些端点关联的东西时,它们就会重新创建自己和return它们的默认视图。
基本上我想删除尽可能多的默认 endpoints/views 从 ASP.NET Core Identity
生成的那些
关于如何实现它的任何想法?
"Templates/Identity/Pages/Account/Account.AccessDenied.cs.cshtml",
"Templates/Identity/Pages/Account/Account.AccessDenied.cshtml",
"Templates/Identity/Pages/Account/Account.ConfirmEmail.cs.cshtml",
"Templates/Identity/Pages/Account/Account.ConfirmEmail.cshtml",
"Templates/Identity/Pages/Account/Account.ExternalLogin.cs.cshtml",
"Templates/Identity/Pages/Account/Account.ExternalLogin.cshtml",
"Templates/Identity/Pages/Account/Account.ForgotPassword.cs.cshtml",
"Templates/Identity/Pages/Account/Account.ForgotPassword.cshtml",
"Templates/Identity/Pages/Account/Account.ForgotPasswordConfirmation.cs.cshtml",
"Templates/Identity/Pages/Account/Account.ForgotPasswordConfirmation.cshtml",
"Templates/Identity/Pages/Account/Account.Lockout.cs.cshtml",
"Templates/Identity/Pages/Account/Account.Lockout.cshtml",
"Templates/Identity/Pages/Account/Account.Login.cs.cshtml",
"Templates/Identity/Pages/Account/Account.Login.cshtml",
"Templates/Identity/Pages/Account/Account.LoginWith2fa.cs.cshtml",
"Templates/Identity/Pages/Account/Account.LoginWith2fa.cshtml",
"Templates/Identity/Pages/Account/Account.LoginWithRecoveryCode.cs.cshtml",
"Templates/Identity/Pages/Account/Account.LoginWithRecoveryCode.cshtml",
"Templates/Identity/Pages/Account/Account.Logout.cs.cshtml",
"Templates/Identity/Pages/Account/Account.Logout.cshtml",
"Templates/Identity/Pages/Account/Account.Register.cs.cshtml",
"Templates/Identity/Pages/Account/Account.Register.cshtml",
"Templates/Identity/Pages/Account/Account.ResetPassword.cs.cshtml",
"Templates/Identity/Pages/Account/Account.ResetPassword.cshtml",
"Templates/Identity/Pages/Account/Account.ResetPasswordConfirmation.cs.cshtml",
"Templates/Identity/Pages/Account/Account.ResetPasswordConfirmation.cshtml",
"Templates/Identity/Pages/Account/Account._ViewImports.cshtml",
"Templates/Identity/Pages/Account/Manage/Account.Manage.ChangePassword.cs.cshtml",
"Templates/Identity/Pages/Account/Manage/Account.Manage.ChangePassword.cshtml",
"Templates/Identity/Pages/Account/Manage/Account.Manage.DeletePersonalData.cs.cshtml",
"Templates/Identity/Pages/Account/Manage/Account.Manage.DeletePersonalData.cshtml",
"Templates/Identity/Pages/Account/Manage/Account.Manage.Disable2fa.cs.cshtml",
"Templates/Identity/Pages/Account/Manage/Account.Manage.Disable2fa.cshtml",
"Templates/Identity/Pages/Account/Manage/Account.Manage.DownloadPersonalData.cs.cshtml",
"Templates/Identity/Pages/Account/Manage/Account.Manage.DownloadPersonalData.cshtml",
"Templates/Identity/Pages/Account/Manage/Account.Manage.EnableAuthenticator.cs.cshtml",
"Templates/Identity/Pages/Account/Manage/Account.Manage.EnableAuthenticator.cshtml",
"Templates/Identity/Pages/Account/Manage/Account.Manage.ExternalLogins.cs.cshtml",
"Templates/Identity/Pages/Account/Manage/Account.Manage.ExternalLogins.cshtml",
"Templates/Identity/Pages/Account/Manage/Account.Manage.GenerateRecoveryCodes.cs.cshtml",
"Templates/Identity/Pages/Account/Manage/Account.Manage.GenerateRecoveryCodes.cshtml",
"Templates/Identity/Pages/Account/Manage/Account.Manage.Index.cs.cshtml",
"Templates/Identity/Pages/Account/Manage/Account.Manage.Index.cshtml",
"Templates/Identity/Pages/Account/Manage/Account.Manage.ManageNavPages.cshtml",
"Templates/Identity/Pages/Account/Manage/Account.Manage.PersonalData.cs.cshtml",
"Templates/Identity/Pages/Account/Manage/Account.Manage.PersonalData.cshtml",
"Templates/Identity/Pages/Account/Manage/Account.Manage.ResetAuthenticator.cs.cshtml",
"Templates/Identity/Pages/Account/Manage/Account.Manage.ResetAuthenticator.cshtml",
"Templates/Identity/Pages/Account/Manage/Account.Manage.SetPassword.cs.cshtml",
"Templates/Identity/Pages/Account/Manage/Account.Manage.SetPassword.cshtml",
"Templates/Identity/Pages/Account/Manage/Account.Manage.ShowRecoveryCodes.cs.cshtml",
"Templates/Identity/Pages/Account/Manage/Account.Manage.ShowRecoveryCodes.cshtml",
"Templates/Identity/Pages/Account/Manage/Account.Manage.TwoFactorAuthentication.cs.cshtml",
"Templates/Identity/Pages/Account/Manage/Account.Manage.TwoFactorAuthentication.cshtml",
"Templates/Identity/Pages/Account/Manage/Account.Manage._Layout.cshtml",
"Templates/Identity/Pages/Account/Manage/Account.Manage._ManageNav.cshtml",
"Templates/Identity/Pages/Account/Manage/Account.Manage._StatusMessage.cshtml",
"Templates/Identity/Pages/Account/Manage/Account.Manage._ViewImports.cshtml",
(...)
您不能使用 AddDefaultIdentity
,因为在内部,此调用 AddDefaultUI
,其中包含您不需要的 Razor Pages "endpoints"。您需要改用 AddIdentity<TUser, TRole>
或 AddIdentityCore<TUser>
。
我检查了 ASPNET 上的源代码 Github 并对其进行了一些编辑
public static IdentityBuilder AddDefaultIdentity<TUser>(this IServiceCollection services, Action<IdentityOptions> configureOptions) where TUser : class
{
services.AddAuthentication(o =>
{
o.DefaultScheme = IdentityConstants.ApplicationScheme;
o.DefaultSignInScheme = IdentityConstants.ExternalScheme;
})
.AddIdentityCookies(o => { });
return services.AddIdentityCore<TUser>(o =>
{
o.Stores.MaxLengthForKeys = 128;
configureOptions?.Invoke(o);
})
.AddDefaultUI() // It'll be removed
.AddDefaultTokenProviders();
}
代码如下:
扩展方法:
public static class IServiceCollectionExtensions
{
public static IdentityBuilder AddCustomDefaultIdentity<TUser>(this IServiceCollection services, Action<IdentityOptions> configureOptions) where TUser : class
{
services.AddAuthentication(o =>
{
o.DefaultScheme = IdentityConstants.ApplicationScheme;
o.DefaultSignInScheme = IdentityConstants.ExternalScheme;
})
.AddIdentityCookies(o => { });
return services.AddIdentityCore<TUser>(o =>
{
o.Stores.MaxLengthForKeys = 128;
configureOptions?.Invoke(o);
})
.AddDefaultTokenProviders();
}
}
Startup.cs
services.AddCustomDefaultIdentity<User>
(
o => { /* options e.g */ o.Password.RequireDigit = true;}
)
.AddSignInManager()
.AddEntityFrameworkStores<Context>();
services.ConfigureApplicationCookie(options =>
{
options.AccessDeniedPath = "some_value";
options.Cookie.Name = "some_value";
options.Cookie.HttpOnly = some_value;
options.ExpireTimeSpan = TimeSpan.FromMinutes(some_value);
options.LoginPath = "some_value";
options.LogoutPath = "some_value";
options.ReturnUrlParameter = CookieAuthenticationDefaults.some_value;
options.SlidingExpiration = some_value;
});
假设我想编写自己的登录、注销端点及其视图
但出于某种原因,我很难删除现有端点
每当我删除可能与这些端点关联的东西时,它们就会重新创建自己和return它们的默认视图。
基本上我想删除尽可能多的默认 endpoints/views 从 ASP.NET Core Identity
生成的那些关于如何实现它的任何想法?
"Templates/Identity/Pages/Account/Account.AccessDenied.cs.cshtml",
"Templates/Identity/Pages/Account/Account.AccessDenied.cshtml",
"Templates/Identity/Pages/Account/Account.ConfirmEmail.cs.cshtml",
"Templates/Identity/Pages/Account/Account.ConfirmEmail.cshtml",
"Templates/Identity/Pages/Account/Account.ExternalLogin.cs.cshtml",
"Templates/Identity/Pages/Account/Account.ExternalLogin.cshtml",
"Templates/Identity/Pages/Account/Account.ForgotPassword.cs.cshtml",
"Templates/Identity/Pages/Account/Account.ForgotPassword.cshtml",
"Templates/Identity/Pages/Account/Account.ForgotPasswordConfirmation.cs.cshtml",
"Templates/Identity/Pages/Account/Account.ForgotPasswordConfirmation.cshtml",
"Templates/Identity/Pages/Account/Account.Lockout.cs.cshtml",
"Templates/Identity/Pages/Account/Account.Lockout.cshtml",
"Templates/Identity/Pages/Account/Account.Login.cs.cshtml",
"Templates/Identity/Pages/Account/Account.Login.cshtml",
"Templates/Identity/Pages/Account/Account.LoginWith2fa.cs.cshtml",
"Templates/Identity/Pages/Account/Account.LoginWith2fa.cshtml",
"Templates/Identity/Pages/Account/Account.LoginWithRecoveryCode.cs.cshtml",
"Templates/Identity/Pages/Account/Account.LoginWithRecoveryCode.cshtml",
"Templates/Identity/Pages/Account/Account.Logout.cs.cshtml",
"Templates/Identity/Pages/Account/Account.Logout.cshtml",
"Templates/Identity/Pages/Account/Account.Register.cs.cshtml",
"Templates/Identity/Pages/Account/Account.Register.cshtml",
"Templates/Identity/Pages/Account/Account.ResetPassword.cs.cshtml",
"Templates/Identity/Pages/Account/Account.ResetPassword.cshtml",
"Templates/Identity/Pages/Account/Account.ResetPasswordConfirmation.cs.cshtml",
"Templates/Identity/Pages/Account/Account.ResetPasswordConfirmation.cshtml",
"Templates/Identity/Pages/Account/Account._ViewImports.cshtml",
"Templates/Identity/Pages/Account/Manage/Account.Manage.ChangePassword.cs.cshtml",
"Templates/Identity/Pages/Account/Manage/Account.Manage.ChangePassword.cshtml",
"Templates/Identity/Pages/Account/Manage/Account.Manage.DeletePersonalData.cs.cshtml",
"Templates/Identity/Pages/Account/Manage/Account.Manage.DeletePersonalData.cshtml",
"Templates/Identity/Pages/Account/Manage/Account.Manage.Disable2fa.cs.cshtml",
"Templates/Identity/Pages/Account/Manage/Account.Manage.Disable2fa.cshtml",
"Templates/Identity/Pages/Account/Manage/Account.Manage.DownloadPersonalData.cs.cshtml",
"Templates/Identity/Pages/Account/Manage/Account.Manage.DownloadPersonalData.cshtml",
"Templates/Identity/Pages/Account/Manage/Account.Manage.EnableAuthenticator.cs.cshtml",
"Templates/Identity/Pages/Account/Manage/Account.Manage.EnableAuthenticator.cshtml",
"Templates/Identity/Pages/Account/Manage/Account.Manage.ExternalLogins.cs.cshtml",
"Templates/Identity/Pages/Account/Manage/Account.Manage.ExternalLogins.cshtml",
"Templates/Identity/Pages/Account/Manage/Account.Manage.GenerateRecoveryCodes.cs.cshtml",
"Templates/Identity/Pages/Account/Manage/Account.Manage.GenerateRecoveryCodes.cshtml",
"Templates/Identity/Pages/Account/Manage/Account.Manage.Index.cs.cshtml",
"Templates/Identity/Pages/Account/Manage/Account.Manage.Index.cshtml",
"Templates/Identity/Pages/Account/Manage/Account.Manage.ManageNavPages.cshtml",
"Templates/Identity/Pages/Account/Manage/Account.Manage.PersonalData.cs.cshtml",
"Templates/Identity/Pages/Account/Manage/Account.Manage.PersonalData.cshtml",
"Templates/Identity/Pages/Account/Manage/Account.Manage.ResetAuthenticator.cs.cshtml",
"Templates/Identity/Pages/Account/Manage/Account.Manage.ResetAuthenticator.cshtml",
"Templates/Identity/Pages/Account/Manage/Account.Manage.SetPassword.cs.cshtml",
"Templates/Identity/Pages/Account/Manage/Account.Manage.SetPassword.cshtml",
"Templates/Identity/Pages/Account/Manage/Account.Manage.ShowRecoveryCodes.cs.cshtml",
"Templates/Identity/Pages/Account/Manage/Account.Manage.ShowRecoveryCodes.cshtml",
"Templates/Identity/Pages/Account/Manage/Account.Manage.TwoFactorAuthentication.cs.cshtml",
"Templates/Identity/Pages/Account/Manage/Account.Manage.TwoFactorAuthentication.cshtml",
"Templates/Identity/Pages/Account/Manage/Account.Manage._Layout.cshtml",
"Templates/Identity/Pages/Account/Manage/Account.Manage._ManageNav.cshtml",
"Templates/Identity/Pages/Account/Manage/Account.Manage._StatusMessage.cshtml",
"Templates/Identity/Pages/Account/Manage/Account.Manage._ViewImports.cshtml",
(...)
您不能使用 AddDefaultIdentity
,因为在内部,此调用 AddDefaultUI
,其中包含您不需要的 Razor Pages "endpoints"。您需要改用 AddIdentity<TUser, TRole>
或 AddIdentityCore<TUser>
。
我检查了 ASPNET 上的源代码 Github 并对其进行了一些编辑
public static IdentityBuilder AddDefaultIdentity<TUser>(this IServiceCollection services, Action<IdentityOptions> configureOptions) where TUser : class
{
services.AddAuthentication(o =>
{
o.DefaultScheme = IdentityConstants.ApplicationScheme;
o.DefaultSignInScheme = IdentityConstants.ExternalScheme;
})
.AddIdentityCookies(o => { });
return services.AddIdentityCore<TUser>(o =>
{
o.Stores.MaxLengthForKeys = 128;
configureOptions?.Invoke(o);
})
.AddDefaultUI() // It'll be removed
.AddDefaultTokenProviders();
}
代码如下:
扩展方法:
public static class IServiceCollectionExtensions
{
public static IdentityBuilder AddCustomDefaultIdentity<TUser>(this IServiceCollection services, Action<IdentityOptions> configureOptions) where TUser : class
{
services.AddAuthentication(o =>
{
o.DefaultScheme = IdentityConstants.ApplicationScheme;
o.DefaultSignInScheme = IdentityConstants.ExternalScheme;
})
.AddIdentityCookies(o => { });
return services.AddIdentityCore<TUser>(o =>
{
o.Stores.MaxLengthForKeys = 128;
configureOptions?.Invoke(o);
})
.AddDefaultTokenProviders();
}
}
Startup.cs
services.AddCustomDefaultIdentity<User>
(
o => { /* options e.g */ o.Password.RequireDigit = true;}
)
.AddSignInManager()
.AddEntityFrameworkStores<Context>();
services.ConfigureApplicationCookie(options =>
{
options.AccessDeniedPath = "some_value";
options.Cookie.Name = "some_value";
options.Cookie.HttpOnly = some_value;
options.ExpireTimeSpan = TimeSpan.FromMinutes(some_value);
options.LoginPath = "some_value";
options.LogoutPath = "some_value";
options.ReturnUrlParameter = CookieAuthenticationDefaults.some_value;
options.SlidingExpiration = some_value;
});