我有一个ASP.Net MVC 4网站。当我开始这个网站时,我几乎没有网络编程经验,我不相信我已经适当地设置了所有这些。
我有一些页面,例如Home,Login,Register,我认为是公开的, 像VerifyPIN和AccountCreated这样的页面,我认为是内部的 和Dashboard和Profile这样的页面是私有的。
我觉得匿名用户应该访问公共页面,但是一旦用户登录就不能访问登录和注册。
内部页面我希望仅在服务器重定向时可用,而不是通过浏览器,也就是说我不希望用户能够输入www.MySite.com/AccountCreated。
私人页面仅供登录用户使用。
我觉得我的私人网页工作正常,但我不知道如何限制对其他网页的访问,如上所述。也许我的想法是不允许登录用户访问登录页面。
由于网站的ajax性质,我的网站相对较小。我在所有公共页面上使用[AllowAnonymous],但是登录用户仍然可以访问这些,我不知道如何防止这种情况。
我的问题是,
如何阻止用户通过地址栏访问网页(www.MySite.com/AccountCreated)
如何在用户登录后阻止访问[AllowAnonymous]页面。
修改 的
阻止登录用户访问某些匿名页面是否正常,例如登录?
答案 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)
只是一些想法(实际上没有尝试过)。
POST
个请求 - 您可以在此处执行的操作不多if (HttpContext.User.Identity.IsAuthenticated) { return RedirectToAction("Index", "Home"); } else return View();
答案 3 :(得分:0)
当用户转到Login
或Register
页面时,只需考虑一下,注销用户。
希望您没有在私人网页上提供任何链接,以便用户转到login
或Register
页面或检查用户是否经过身份验证会将其重定向到Home
页面,坦白说,您无法阻止用户撰写URL
并按enter
按钮,或只是发出{{{ 1}}。