【问题标题】:Getting error "ERR_TOO_MANY_REDIRECTS" in asp.net core在 asp.net 核心中出现错误“ERR_TOO_MANY_REDIRECTS”
【发布时间】:2020-08-11 20:20:08
【问题描述】:

我正在尝试创建自定义登录注销,其中 whout 登录用户无法访问主视图。登录后用户可以重定向到主页视图。如果用户试图访问主视图,那么他必须被重定向到登录页面。

这是我的代码...

登录部分查看

@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");
    }
}

}

用户无法在没有登录的情况下打开主页视图。

【问题讨论】:

    标签: asp.net-core asp.net-core-mvc asp.net-core-2.2


    【解决方案1】:

    我建议..创建一个基本控制器。另一个控制器应该从基本控制器继承。您可以检查用户是否在基本控制器中登录,如果您发现用户未登录,那么您可以将用户重定向到登录页面。 不推荐您在登录视图中检查用户登录的方式。

     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");
        }
    }
    

    所以当任何用户想要访问任何页面时,您的应用程序将始终以这种方式检查用户身份验证。

    【讨论】:

      【解决方案2】:

      在不运行代码的情况下,它看起来就像您将用户设置为无限循环一样。您的视图检查用户名并在失败时重定向到“/login”端点,该端点随后返回视图,该视图再次检查,依此类推。最终,浏览器会踩刹车。

      从您所展示的内容来看,您似乎是在尝试推出自己的登录机制,而不是利用 ASP NET Core 可以提供的功能来帮助自动处理其中的一些问题。看看Simple authorization in ASP.NET Core

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-10-08
        • 2019-02-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多