У меня есть простое веб-приложение на .NET Core 2.2. Я хотел бы иметь только авторизацию для публичной стороны приложения. Вы можете спросить меня «где я буду брать новых пользователей для моей системы, если у меня будет только авторизация?». Я хотел бы создавать пользователей вручную. С моей точки зрения, эта задача очень проста. Любой веб-фреймворк имеет для этого какой-то функционал. Но я не могу найти цивилизованный способ реализовать это для .NET Core!
Итак, на самом деле у меня есть довольно уродливый способ сделать это. Я только что добавил это промежуточное ПО:
Образец формы Startup.cs
file
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
// disable registration if not Local environment
app.Use(async (context, next) =>
{
if (env.IsEnvironment("Local"))
{
await next.Invoke();
}
else
{
if (context.Request.Path.ToString().Contains("Register") ||
context.Request.Path.ToString().Contains("ForgotPassword"))
{
await context.Response.WriteAsync("Registration is closed");
}
else
{
await next.Invoke();
}
}
});
Как видите, если среда локальная - я могу зарегистрировать нового пользователя. Остальное - регистрация закрыта.
Я знал, что этот путь плох, и я начал исследовать, как его улучшить. Мой план был перезаписан AcountController
и пользовательские дополнительные условия для регистрации метода. Я знаю, что есть этот документ ms документация . Это может генерировать леса идентификации. Но это не может генерировать AccountController
! Только просмотры. Я пытался сделать AccountController
вручную, но безуспешно. Я покажу вам:
public class AccountController : Controller
{
private readonly UserManager<IdentityUser> _userManager;
private readonly SignInManager<IdentityUser> _signInManager;
public AccountController(SignInManager<IdentityUser> signInManager, UserManager<IdentityUser> userManager)
{
_signInManager = signInManager;
_userManager = userManager;
}
[HttpGet]
public IActionResult Login()
{
return NotFound();
}
}
Я ожидал, что приведенный выше код отключит вход в систему и сделает для меня 404 вместо входа в систему. Но логин работает.
Эта задача проста: создать веб-приложение с авторизацией, но без регистрации (только разработчик может добавлять новых пользователей). Как сделать это для .Net Core?
Я поставил здесь настройки идентичности:
services.AddDefaultIdentity<IdentityUser>()
.AddDefaultUI(UIFramework.Bootstrap4)
.AddEntityFrameworkStores<ApplicationDbContext>();