Невозможно достичь маршрутов HomeController с включенной UseAuthentication - PullRequest
0 голосов
/ 30 октября 2018

Как говорится в заголовке, я хочу реализовать какую-то авторизацию в .NET Core 2.1, но у меня возникают проблемы с их учебниками. Я настроил файл Startup.cs

public void ConfigureServices(IServiceCollection services)
    {

        string connection = Configuration.GetConnectionString("DefaultConnection");
        if (_currentEnvironment.IsDevelopment())
            services.AddDbContext<PagesContext>(options => options.UseSqlServer(connection), ServiceLifetime.Singleton);
        else
            services.AddDbContext<PagesContext>(options => options.UseMySql(connection), ServiceLifetime.Singleton);

        services.AddIdentity<User, IdentityRole>(opts=>
        {
            opts.Password.RequireDigit = false;
            opts.Password.RequiredLength = 8;
            opts.Password.RequireLowercase = false;
            opts.Password.RequireNonAlphanumeric = false;
            opts.Password.RequireUppercase = false;
            opts.User.AllowedUserNameCharacters = null;
        }).AddEntityFrameworkStores<PagesContext>()
        .AddDefaultTokenProviders();

        services.AddSingleton<IStringLocalizerFactory, EFStringLocalizerFactory>();
        services.AddMvc();

    }


    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
            app.UseStatusCodePages();
        }
        else
        {
            app.UseExceptionHandler("/Home/Error");
        }
        var supportedCultures = new[]
        {
            new CultureInfo("en-US"),
            new CultureInfo("en-GB"),
            new CultureInfo("en"),
            new CultureInfo("ru-RU"),
            new CultureInfo("ru"),
            new CultureInfo("uk-UA"),
            new CultureInfo("ua")
        };
        app.UseRequestLocalization(new RequestLocalizationOptions
        {
            DefaultRequestCulture = new RequestCulture("ru-RU"),
            SupportedCultures = supportedCultures,
            SupportedUICultures = supportedCultures
        });
        app.UseStaticFiles();
        app.UseAuthentication();
        app.UseMvc(
            routes =>
            {
                routes.MapRoute(
                    name: "default",
                    template: "{controller=Home}/{action=Index}/{id?}");
            }
        );

И у меня есть файл HomeController.cs со следующим содержимым:

    [HttpGet]
    public async Task<IActionResult> Index()
    {

        var user = await _userManager.GetUserAsync(HttpContext.User);
        if (user != null)
        {
            if (await _userManager.IsInRoleAsync(user, "Admin"))
            {
                return LocalRedirectPermanent("/Admin/Index");
            }
            else if (await _userManager.IsInRoleAsync(user, "Carrier"))
            {
                return LocalRedirectPermanent("/Carrier/Index");
            }
            return LocalRedirectPermanent("/Passenger/Index");
        }
        Page indexPage = db.Page.Include(u => u.Title).Include(u => u.Description).FirstOrDefault(p => p.Tag == "main_page");
        return View();
    }

Как видно из кода, который я хочу обнаружить, если пользователь вошел в систему - показать соответствующую страницу. Если нет - страница, которая включает процедуру входа в систему. Но маршрут по умолчанию игнорируется, когда используется аутентификация. Если я запускаю это из Visual Studio, он переходит ко мне в / Account / AccessDenied? ReturnUrl =% 2FPassenger% 2FIndex, а не / Home / Index. Как я могу переопределить это?

1 Ответ

0 голосов
/ 30 октября 2018

Я нашел это. И кажется, это не вина .NET Core. Это основано на заголовках. В моем случае LocalRedirectPermanent("/Admin/Index") вызывался несколько раз, поэтому он автоматически назывался "/ Admin / Index", минуя "/ Home / Index". Я думаю, это связано с этим . Поэтому я исправил в своем браузере (Firefox) следующий способ: сбросьте историю (формы, файлы cookie и т. Д.) И выполните в Visual Studio Build-> Rebuild Solution. И это снова заработало. Надеюсь, это помогло кому-то

...