Эта страница не работает Localhost перенаправляется слишком много раз MVC

Файл Program.cs с аутентификацией Cookie:

builder.Services.AddAuthentication("CookieAuthentication").AddCookie("CookieAuthentication", options =>
            {
                options.LoginPath = "/<Login/LoginView";
                options.AccessDeniedPath = "/Login/AccessDenied";
            });

// Configure the HTTP request pipeline.

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

app.UseRouting();

app.UseAuthentication();
app.UseAuthorization();

app.MapControllerRoute(
    name: "default",
    pattern: "{controller=Login}/{action=Signup}/{id?}");

app.Run();

Контроллер входа:

 [HttpPost]
        [ValidateAntiForgeryToken]
        public IActionResult LoginView(string username, string password)
        {
            if (!ModelState.IsValid)
            {
                //Error code here
            }
            
            if (!UserExists(username, password))//Check if user exists in Database
            {
                //Error code here
            }
           
            TempData["Username"] = username;
            return RedirectToAction("Index", "Home");
            //I used breakpoint here and this code runs but doesn't work properly.
        }

Я также использовал атрибут [Authorize] на Home Controller, чтобы пользователи не могли получить к нему доступ без входа в систему. Login/LoginView — это путь входа в систему.

Вы сказали, что добавляете атрибут [Authorize] в HomeController? Обязательно добавьте [AllowAnonymous] к действию Index в HomeController. Потому что для вашего URL кажется, что он всегда перенаправляет на Home/Index.

Rena 07.02.2023 10:21
Стоит ли изучать 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
1
65
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Эта страница не работает Localhost перенаправляется слишком много раз MVC

Для вашего текущего сценария обязательно добавьте [AllowAnonymous] к вашему Index действию в HomeController. А ваш LoginPath — это /Home/Index, авторизация не требуется.

[Authorize]
public class HomeController : Controller
{
    [AllowAnonymous]
    public async Task<IActionResult> Index()
    {
        //do your stuff...
        return View();            
    }
    //....
}

Обновлять:

Аутентификация cookie для входа

Программа.cs:

builder.Services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme).AddCookie(options =>
{
    options.LoginPath = "/Login/LoginView";
    options.AccessDeniedPath = "/Login/AccessDenied";
});
        
var app = builder. Build();
       
app.UseHttpsRedirection();
app.UseStaticFiles();

app.UseAuthentication();   //be sure add authentication and authorization middleware.....
app.UseAuthorization();

//...

Как вздохнуть в пользователь:

[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> LoginView(string username, string password)
{
     if (!ModelState.IsValid)
     {
        //Error code here
     }
        
     if (!UserExists(username, password))//Check if user exists in Database
     {
        //Error code here
     }                      
    var claims = new List<Claim>
    {
        new Claim(ClaimTypes.NameIdentifier,username)   //add the claims you want...
    };
    //authProperties you can choose any option you want, below is a sample...
    var authProperties = new AuthenticationProperties
    {
        //IssuedUtc = DateTimeOffset.UtcNow,
        //ExpiresUtc = DateTimeOffset.UtcNow.AddHours(1),
        //IsPersistent = false
    };
    var claimsIdentity = new ClaimsIdentity(claims, CookieAuthenticationDefaults.AuthenticationScheme);
    await HttpContext.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme, new ClaimsPrincipal(claimsIdentity), authProperties);

    TempData["Username"] = username;
    return RedirectToAction("Index", "Home");
    
}

Я знаю, что это решает одну проблему, но, тем не менее, пользователь не может получить доступ к другим авторизованным контроллерам и методам действий. Потому что он не авторизован. Также, если я установлю LoginPath как /Home/Index, целевая страница станет домашней, а не страницей входа. Кроме того, маршрут по умолчанию /Home/Index упоминается в промежуточном программном обеспечении.

Babar Hussain 07.02.2023 11:54

Привет @BabarHussain, если эта первоначальная проблема была решена, предложите принять ответ, который позволит другим быстро найти решение. Для новой проблемы, пожалуйста, опубликуйте новую тему, чтобы объяснить, как пользователь входит в систему, и поделитесь подробным кодом, потому что невозможность доступа к авторизованному действию вызвана неавторизованным или неавторизованным пользователем. Спасибо.

Rena 08.02.2023 06:12

Я бы, конечно, принял ответ, но он точно не дает решения. [AllowAnonymous] в действии Index в HomeController не является хорошим подходом, поскольку пользователь не прошел проверку. Пользователь должен пройти проверку для доступа к любым другим контроллерам или методам действий.

Babar Hussain 08.02.2023 15:50

Я думаю, вы не понимаете ошибки. Ваш путь входа невозможен для авторизации. Потому что если метод объявлен с авторизацией, его необходимо авторизовать, и проект будет перенаправлять на путь входа в систему. Для вашего пути входа в систему используется Home/Index, поэтому он всегда будет перенаправлять пользователя на путь входа.

Rena 09.02.2023 02:31

Моя ошибка, я использовал неправильный путь входа в файл program.cs, теперь исправлена. Домашний контроллер — это путь, который отображается после успешного входа в систему из Login/LoginView.

Babar Hussain 09.02.2023 13:29

Поэтому вам нужно поделиться, как вы хотите войти в систему, с помощью аутентификации cookie или идентификации, ваш код всегда перенаправляет на действие Index, конечно, он всегда будет давать вам слишком много перенаправлений, поэтому я даю вам добавить атрибут [AllowAnonymous] для ваша текущая проблема. В любом случае, я обновляю ответ и рассказываю, как работает аутентификация файлов cookie, которую вы можете проверить.

Rena 10.02.2023 02:27

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