Я создаю приложение, в котором только администратор может добавлять ученика или учителя. Я не хочу, чтобы кто-либо регистрировался в качестве ученика или преподавателя. Я использую ASP.NET Core 8.0 вместе с Entity Framework Core.
Я добавил ASP.NET Core Identity. Затем я удалил файлы register.cshtml и register.cshtml.cs, а также удалил кнопку регистрации в представлении. Но если я знаю URL https://localhost:7044/Identity/Account/Register?returnUrl=%2F страницы регистрации, то я все равно смогу зарегистрироваться.
Как решить эту проблему?
Я хочу полностью удалить регистрацию, даже если кто-то знает ссылку на регистрацию, он тоже не может зарегистрироваться.





Я удалил файлы Register.cshtml и Register.cshtml.cs, а также удалил кнопку регистрации в представлении. Но если я знаю URL https://localhost:7044/Identity/Account/Register?returnUrl=%2F из зарегистрируйтесь, то я еще смогу зарегистрироваться.
Нет, вам вообще не нужно удалять эти страницы. Вместо этого с этим можно справиться несколькими способами. Вы можете использовать аутентификацию на основе ролей , фильтры или промежуточное программное обеспечение, чтобы ограничить конечную точку либо доступом, либо регистрацией нового ученика или учителя.
Я хочу полностью удалить регистрацию, даже если кто-то знает ссылка на регистрацию, они тоже не могут зарегистрироваться. Как удалить регистрацию полностью в ASP.NET Core 8.0 с Entity Framework Core?
Если вы хотите удалить страницу регистрации, ссылку или что-либо, связанное с регистрацией, вы можете сделать это, просто исключив этот файл из проекта следующим образом:
Чтобы, если они вам потребуются обратно, можно было просто включить снова. Потому что удаление кода всегда будет стоить вам денег.
Кроме того, вы можете установить аутентификацию на основе ролей, фильтрацию или даже промежуточное программное обеспечение, чтобы только авторизованный пользователь мог получить доступ к конечной точке или зарегистрировать нового ученика или учителя. Это идеальный и элегантный вариант использования.
Если вы хотите использовать аутентификацию на основе ролей, вы можете просто сделать это следующим образом:
[Authorize(Roles = "Admin")]
public class RegisterModel : PageModel
{
public RegisterModel()
{
// Your constructior
}
public class InputModel
{
//Your model
}
public async Task OnGetAsync(string returnUrl = null)
{
ReturnUrl = returnUrl;
ExternalLogins = (await _signInManager.GetExternalAuthenticationSchemesAsync()).ToList();
}
public async Task<IActionResult> OnPostAsync(string returnUrl = null)
{
return Page();
}
}
Таким образом, только администратор мог получить доступ к этой конечной точке.
Кроме того, вы также можете использовать фильтры действий. В этом сценарии у вас должен быть обработчик метода действия:
public class AdminOnlyAttribute : AuthorizeAttribute, IAsyncPageFilter
{
public async Task OnPageHandlerSelectionAsync(PageHandlerSelectedContext context)
{
}
public async Task OnPageHandlerExecutionAsync(PageHandlerExecutingContext context, PageHandlerExecutionDelegate next)
{
var user = context.HttpContext.User;
if (!user.Identity.IsAuthenticated || !user.IsInRole("Admin"))
{
context.Result = new RedirectToActionResult("AccessDenied", "Account", null);
return;
}
await next();
}
}
Примечание. Таким образом, без администратора страница регистрации не будет доступна и будет перенаправлена на страницу AccessDenied. Если вам нужна дополнительная информация, пожалуйста обратитесь к этому официальному документу . Для промежуточного программного обеспечения проверьте это.