Как полностью удалить регистрацию в ASP.NET Core 8.0 с помощью Entity Framework Core?

Я создаю приложение, в котором только администратор может добавлять ученика или учителя. Я не хочу, чтобы кто-либо регистрировался в качестве ученика или преподавателя. Я использую 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 страницы регистрации, то я все равно смогу зарегистрироваться.

Как решить эту проблему?

Я хочу полностью удалить регистрацию, даже если кто-то знает ссылку на регистрацию, он тоже не может зарегистрироваться.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
87
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я удалил файлы 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. Если вам нужна дополнительная информация, пожалуйста обратитесь к этому официальному документу . Для промежуточного программного обеспечения проверьте это.

Другие вопросы по теме

Выход и вход в систему не работают в auth.js в Next14 с промежуточным программным обеспечением и действиями сервера
Невозможно связать базу данных SQL Azure с фабрикой данных с помощью управляемого удостоверения
Макет клерка не отображается
Почему пакет lexik-jwt возвращает пустой токен с правильными учетными данными?
Доступ к API/конечным точкам OData Azure Devops с помощью PAT? (Я использую PowerShell)
Приложения Azure MSAL React используют одну и ту же аутентификацию/пользователя в нескольких приложениях
Как избежать бесконечного цикла перенаправления при объединении двух разных схем аутентификации (openIdConnect и ASP.NET Identity)?
Использование файла cookie laravel 11 для ручной аутентификации запроса
Оптимизация получения пользовательских данных в Next.js: лучшие практики и альтернативы
Ключ общего доступа к учетной записи хранения Azure, используемый в ChainedTokenCredential для аутентификации клиента в Python SDK?