根据身份验证阻止访问页面

时间:2013-10-08 14:08:39

标签: asp.net-mvc asp.net-mvc-4 authentication

我有一个ASP.Net MVC 4网站。当我开始这个网站时,我几乎没有网络编程经验,我不相信我已经适当地设置了所有这些。

我有一些页面,例如Home,Login,Register,我认为是公开的, 像VerifyPIN和AccountCreated这样的页面,我认为是内部的 和Dashboard和Profile这样的页面是私有的。

我觉得匿名用户应该访问公共页面,但是一旦用户登录就不能访问登录和注册。

内部页面我希望仅在服务器重定向时可用,而不是通过浏览器,也就是说我不希望用户能够输入www.MySite.com/AccountCreated。

私人页面仅供登录用户使用。

我觉得我的私人网页工作正常,但我不知道如何限制对其他网页的访问,如上所述。也许我的想法是不允许登录用户访问登录页面。

由于网站的ajax性质,我的网站相对较小。我在所有公共页面上使用[AllowAnonymous],但是登录用户仍然可以访问这些,我不知道如何防止这种情况。

我的问题是,

如何阻止用户通过地址栏访问网页(www.MySite.com/AccountCreated)

如何在用户登录后阻止访问[AllowAnonymous]页面。

修改

阻止登录用户访问某些匿名页面是否正常,例如登录?

4 个答案:

答案 0 :(得分:3)

您可以随时检查用户是否已登录。如果有,他将被重定向到另一页:

public ActionResult AccountCreated(some params)
{
           if (Request.IsAuthenticated)
            {
                return RedirectToAction("Index")
            }
            else
             {
              // login logic here
              }
}

您也可以直接在View中查看:

@if (Request.IsAuthenticated)
{
   <span> You are already logged in</span>
}
else
{
  //Login form here
}

答案 1 :(得分:1)

对于您的第一个问题,您可以使用[授权]操作过滤器。

对于您的其他问题,我猜您必须编写自己的实现。您需要创建一个新的IAuthorizationFilter并使用它而不是[AllowAnonymous]

答案 2 :(得分:1)

只是一些想法(实际上没有尝试过)。

  • 问题 1 - 如果 AccountCreated 是一个操作,表示注册表单实际POST到该网址 - 可以从外。我建议您为其应用HttpPost属性,以便它只处理POST个请求 - 您可以在此处执行的操作不多
  • 对于第二点,您可以在动作方法中执行类似的操作
 if (HttpContext.User.Identity.IsAuthenticated)
            {
                return RedirectToAction("Index", "Home");
            }
else return View();

答案 3 :(得分:0)

当用户转到LoginRegister页面时,只需考虑一下,注销用户。 希望您没有在私人网页上提供任何链接,以便用户转到loginRegister 页面或检查用户是否经过身份验证会将其重定向到Home页面,坦白说,您无法阻止用户撰写URL并按enter按钮,或只是发出{{{ 1}}。