ASP. Net Не все страницы идентификации в ядре 3.1 используются (ie. Страница входа в порядке, страница регистрации в норме) ... почему? - PullRequest
0 голосов
/ 06 мая 2020

Я только что успешно скаффолдинг страниц удостоверений с помощью инструмента dotnet aspnet-codegenerator identity и добавил пользовательский код при запуске для заполнения некоторых ролей.

Затем я хотел обновить файл /Areas/Identity/Pages/Register.cshtml.cs кодом, чтобы добавить пользовательские Роль только что созданного пользователя ... НО точки останова на этой странице не достигнуты.

  • когда я изменяю HTML Login.cs html, все в порядке, Я вижу, что изменения и точки останова в файле .cs достигнуты

  • , когда я пытаюсь сделать то же самое в Register.cs html, ничего не принимается во внимание, пользовательский HTML не обновляется, и точки останова никогда не достигаются

Может быть, я что-то пропустил в конфигурации запуска?


EDIT

Если я переименую Register.cshtml / .cs в Register2 , я смогу попасть на ДВЕ страницы по маршрутам / Identity / Account / Register и / Identity / Account / Register2 .

НО при нацеливании на Register2 точки останова достигаются и HTML актуально ...

Может есть скрытая ссылка с IdentityHostingStartup?


Вот она:

    public class Startup
    {
        public Startup(IConfiguration configuration)
        {
            Configuration = configuration;
        }

        public IConfiguration Configuration { get; }

        public void ConfigureServices(IServiceCollection services)
        {
            services.AddDbContext<ApplicationDbContext>(options =>
                options.UseSqlServer(
                    Configuration.GetConnectionString("DefaultConnection")));

            services.AddDefaultIdentity<IdentityUser>(options =>
                {
                    options.SignIn.RequireConfirmedAccount = true;
                })
                .AddRoles<IdentityRole>()
                .AddEntityFrameworkStores<ApplicationDbContext>();


            services.AddAuthentication();

            services.AddControllersWithViews();
            services.AddMvc();

            services.AddRazorPages();
        }

        public void Configure(IApplicationBuilder app, IWebHostEnvironment env, RoleManager<IdentityRole> roleManager, UserManager<IdentityUser> userManager)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
                app.UseDatabaseErrorPage();
            }
            else
            {
                app.UseExceptionHandler("/Error");

                app.UseHsts();
            }

            app.UseHttpsRedirection();
            app.UseStaticFiles();

            app.UseRouting();

            app.UseAuthentication();

            app.UseAuthorization();

            app.UseEndpoints(endpoints =>
            {
                endpoints.MapControllers();
                endpoints.MapRazorPages();
            });
        }

    }

Спасибо много приятелей ^^

1 Ответ

0 голосов
/ 07 мая 2020

Вот рабочая демонстрация того, как добавить роль к вновь созданному пользователю:

Для вашего Startup.cs нет необходимости в DI UserManager и RoleManager:

public class Startup
{
    public Startup(IConfiguration configuration)
    {
        Configuration = configuration;
    }

    public IConfiguration Configuration { get; }
    public void ConfigureServices(IServiceCollection services)
    {           
        services.AddDbContext<ApplicationDbContext>(options =>
            options.UseSqlServer(
                Configuration.GetConnectionString("DefaultConnection")));

        services.AddDefaultIdentity<IdentityUser>()
            .AddRoles<IdentityRole>()
            .AddEntityFrameworkStores<ApplicationDbContext>();

        services.AddAuthentication();
        services.AddControllersWithViews();
        services.AddRazorPages();
    }

    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
            app.UseDatabaseErrorPage();
        }
        else
        {
            app.UseExceptionHandler("/Error");

            app.UseHsts();
        }

        app.UseHttpsRedirection();           
        app.UseStaticFiles();
        app.UseRouting();
        app.UseAuthentication();
        app.UseAuthorization();

        app.UseEndpoints(endpoints =>
        {
            endpoints.MapControllerRoute(
                    name: "default",
                    pattern: "{controller=Home}/{action=Index}/{id?}");
            endpoints.MapRazorPages();
        });
    }
}

Для Register.cs html .cs:

public async Task<IActionResult> OnPostAsync(string returnUrl = null)
    {
        returnUrl = returnUrl ?? Url.Content("~/");
        ExternalLogins = (await _signInManager.GetExternalAuthenticationSchemesAsync()).ToList();
        if (ModelState.IsValid)
        {
            bool x = await _roleManager.RoleExistsAsync("Admin");
            if (!x)
            {
                // first we create Admin role   
                var role = new IdentityRole();
                role.Name = "Admin";
                await _roleManager.CreateAsync(role);
            }

            var user = new ApplicationUser { UserName = Input.Email, Email = Input.Email };
            var result = await _userManager.CreateAsync(user, Input.Password);

            var data = await _userManager.AddToRoleAsync(user, "Admin");

            if (result.Succeeded)
            {                   
                   //...                                    
            }

        }
        return Page();
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...