Получение ошибки «ERR_TOO_MANY_REDIRECTS» в asp. net ядре - PullRequest
0 голосов
/ 28 апреля 2020

Я пытаюсь создать пользовательский выход из системы, в котором зарегистрированный пользователь не может получить доступ к домашнему виду. и после входа в систему пользователь может перенаправить на домашний вид. Если пользователь пытается получить доступ к домашнему виду, он должен быть перенаправлен на страницу входа.

вот мой код ...

LoginPartial View

@using Microsoft.AspNetCore.Identity
@inject SignInManager<IdentityUser> SignInManager
@inject UserManager<IdentityUser> UserManager
@using Microsoft.AspNetCore.Http;

@{

    var userId = Context.Session.GetString("username");
    if (userId == null)
    {
        Context.Response.Redirect("/Login");
    }
    else
    {
    <ul class="navbar-nav">

        <li class="nav-item">
            <a class="nav-link text-light mt-2">Hello @Context.Session.GetString("username")!</a>
        </li>
        <li class="nav-item">
            <form class="form-inline" asp-area="Identity" asp-page="/Account/Logout" asp-route-returnUrl="@Url.Action("Index", "Home", new { area = "" })">
                <button type="submit" class="nav-link btn btn-link text-white-50">Logout</button>
            </form>
        </li>
        </ul>
    }
 }

вот мой контроллер входа

  public class LoginController : Controller
{
    private readonly ApplicationDbContext _db;

    public LoginController(ApplicationDbContext context)
    {
        _db = context;
    }
    public IActionResult Index()
    {
        return View("Login");
    }

    [HttpPost]
    public IActionResult LoginProcess(string username, string password)
    {
        var userId = _db.logins.Where(p=>p.UserName==username && p.Password==password && p.ExpiryDate> DateTime.Now).Select(p=>p.Id).FirstOrDefault();
        if (userId>0)
        {
            HttpContext.Session.SetString("username", username);
            return Redirect("~/Reception/Home");
        }
        else
        {
            ViewBag.error = "Invalid Login..!";
            return View("Login");
        }
    }

    [HttpGet]
    public IActionResult Logout()
    {
        HttpContext.Session.Remove("username");
        return RedirectToAction("Index");
    }
}

}

Пользователь не может открыть домашний вид без входа в систему.

Ответы [ 2 ]

0 голосов
/ 28 апреля 2020

Без запуска кода, при первом проходе он выглядит так, как будто вы устанавливаете для пользователя бесконечное значение l oop. Ваше представление проверяет имя пользователя и перенаправляет на конечную точку «/ login» при сбое, которое впоследствии возвращает представление, которое проверяет снова и так далее. В конце концов, браузер тормозит вас.

Из того, что вы представляете, похоже, что вы пытаетесь свернуть свой собственный механизм входа в систему, а не воспользоваться тем, что может ASP NET Core предлагаем помочь разобраться с этим автоматически. Взгляните на Простая авторизация в ASP. NET Core

0 голосов
/ 28 апреля 2020

Я бы предложил .. создать базовый контроллер. другие контроллеры должны наследоваться от базового контроллера. Вы можете проверить, вошел ли пользователь в базовый контроллер или нет, и если вы обнаружили, что пользователь не вошел в систему, вы можете перенаправить пользователя на страницу входа. Способ, которым вы проверяли логин пользователя при просмотре логина, не рекомендуется.

 public class BaseController : Controller
{
    // Check here user credentials or whether user is logged-in or not
}

 public class LoginController : BaseController
{
    public IActionResult home()
    {
        return View("home");
    }
}

ТАК, когда любой пользователь хочет получить доступ к любой странице, ваше приложение всегда будет проверять аутентификацию пользователя таким образом.

...