Авторизовать страницу регистрации в ASP.NET Core 2.1 с интерфейсом идентификации в качестве библиотеки - PullRequest
0 голосов
/ 07 июня 2018

Я работаю над проектом Razor Pages в .NET Core 2.1.3 с ASP.NET Core Identity.

Мне было интересно, можно ли авторизовать страницу 'Register' с помощьюИдентификационные данные в качестве предварительно созданного пользовательского интерфейса без необходимости восстановления всего кода, связанного с идентификацией.Только зарегистрированные пользователи (оптимально на основе ролей) должны иметь возможность регистрировать новых пользователей.

Я пытался добавить следующее в Startup.cs -файл, но ни один из них не помогает:

services.AddMvc()
.AddRazorPagesOptions(options =>
{
    options.Conventions.AuthorizeFolder("/Admin");
    // Trying to authorize the Register-page
    options.Conventions.AuthorizeAreaPage("Identity", "/Account/Register");
    options.Conventions.AuthorizeAreaPage("Identity", "/Pages/Account/Register");
    options.Conventions.AuthorizePage("/Identity/Account/Register");
    options.Conventions.AuthorizePage("/Account/Register");
    options.Conventions.AuthorizePage("/Identity/Pages/Account/Register");
    options.Conventions.AuthorizeFolder("/Identity/Pages/Account");
    options.Conventions.AuthorizeFolder("/Identity/Account");
    options.Conventions.AuthorizeFolder("/Account");
    options.Conventions.AuthorizeFolder("/Areas/Identity/Pages/Account");
    options.Conventions.AuthorizeFolder("/Areas/Identity/Pages");
    options.Conventions.AuthorizeFolder("/Areas/Identity");
    options.Conventions.AuthorizeFolder("/Areas");
})
.SetCompatibilityVersion(CompatibilityVersion.Version_2_1);

В качестве альтернативы, можно ли вообще отключить регистрацию новых пользователей?

Спасибо!

1 Ответ

0 голосов
/ 16 июня 2018

Следующее работает для меня и использует авторизацию на основе ролей.Мне все еще приходилось создавать некоторые страницы, но только те, которые нуждались в обновлении.

Страницы входа в систему и регистрации Scaffold

Я только защищал страницы входа и регистрации, используя следующие:

Идентификация скаффолда в проекте Razor с авторизацией

Это также полезно.Вот демонстрация, демонстрирующая выше:

Что нового в веб-разработке с ASP.NET Core 2.1: сборка 2018

Login.cshtml - я прокомментировал следующее.

<p>
    <a asp-page="./Register" asp-route-returnUrl="@Model.ReturnUrl">Register as a new user</a>
</p>

Register.cshtml.cs - я удалил атрибут AllowAnonymous

<s>[AllowAnonymous]</s>
public class RegisterModel : PageModel


Startup.cs - ConfigureServices

public void ConfigureServices(IServiceCollection services)
{
    services.Configure<CookiePolicyOptions>(options =>
    {
        // This lambda determines whether user consent for non-essential cookies is needed for a given request.
        options.CheckConsentNeeded = context => true;
        options.MinimumSameSitePolicy = SameSiteMode.None;
    });

    services.AddDbContext<ApplicationDbContext>(options =>
        options.UseSqlite(
            Configuration.GetConnectionString("DefaultConnection")));

    services.AddIdentity<IdentityUser, IdentityRole>(options =>{
        options.SignIn.RequireConfirmedEmail = true;
    })
        .AddDefaultUI()
        .AddDefaultTokenProviders()
        .AddEntityFrameworkStores<ApplicationDbContext>();

    // Register no-op EmailSender used by account confirmation and password reset during development
    // For more information on how to enable account confirmation and password reset please visit https://go.microsoft.com/fwlink/?LinkID=532713
    services.AddSingleton<Microsoft.AspNetCore.Identity.UI.Services.IEmailSender, EmailSender>();

    services.AddAuthorization(options =>
    {
        options.AddPolicy("RequireAdministratorRole",
            policy => policy.RequireRole("Admin"));
        options.DefaultPolicy = options.GetPolicy("RequireAdministratorRole");
    });

    services.AddMvc()
       .AddRazorPagesOptions(options =>
        {
            options.Conventions.AuthorizePage("/About", "RequireAdministratorRole");
            options.Conventions.AuthorizeAreaPage("Identity", "/Account/Register");
        })
        .SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
}
...