Asp.net mvc 防止基于身份验证访问页面

Asp.net mvc 防止基于身份验证访问页面,asp.net-mvc,asp.net-mvc-4,authentication,Asp.net Mvc,Asp.net Mvc 4,Authentication,我有一个ASP.NETMVC4网站。当我创建这个网站的时候,我几乎没有网络编程经验,而且我不相信我把它都设置得很好 我有页面,如首页、登录、登记,我认为是公共的, 页面,如ViFiPyPin和Actudio,我认为是内部的 还有像仪表板和个人资料这样的私人页面 我觉得公共页面应该被匿名用户访问,但是一旦用户登录,登录和注册就不应该被访问 内部页面我只希望在服务器重定向时可用,而不希望通过浏览器,也就是说,我不希望用户能够键入www.MySite.com/AccountCreated 私人页面仅适

我有一个ASP.NETMVC4网站。当我创建这个网站的时候,我几乎没有网络编程经验,而且我不相信我把它都设置得很好

<>我有页面,如首页、登录、登记,我认为是公共的, 页面,如ViFiPyPin和Actudio,我认为是内部的 还有像仪表板和个人资料这样的私人页面

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

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

私人页面仅适用于登录用户

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

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

我的问题是,

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

一旦用户登录,如何阻止访问[AllowAnonymous]页面。

编辑


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

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


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

对于第一个问题,您可以使用[Authorization]操作筛选器


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

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

public ActionResult AccountCreated(some params)
{
           if (Request.IsAuthenticated)
            {
                return RedirectToAction("Index")
            }
            else
             {
              // login logic here
              }
}
您也可以直接在视图中进行检查:

@if (Request.IsAuthenticated)
{
   <span> You are already logged in</span>
}
else
{
  //Login form here
}
@if(Request.IsAuthenticated)
{
您已登录
}
其他的
{
//登录表单在这里
}

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

public ActionResult AccountCreated(some params)
{
           if (Request.IsAuthenticated)
            {
                return RedirectToAction("Index")
            }
            else
             {
              // login logic here
              }
}
您也可以直接在视图中进行检查:

@if (Request.IsAuthenticated)
{
   <span> You are already logged in</span>
}
else
{
  //Login form here
}
@if(Request.IsAuthenticated)
{
您已登录
}
其他的
{
//登录表单在这里
}
只是一些想法(实际上没有尝试过)

  • 对于问题1,如果AccountCreated是一个动作,意味着注册表单实际上发布到该URL-,即可以从外部访问它。我建议您对它应用一个属性,这样它将只处理
    POST
    请求-在这里您可以做的不多
  • 对于第二点,您可以在动作方法中执行类似的操作
只是一些想法(实际上没有尝试过)

  • 对于问题1,如果AccountCreated是一个动作,意味着注册表单实际上发布到该URL-,即可以从外部访问它。我建议您对它应用一个属性,这样它将只处理
    POST
    请求-在这里您可以做的不多
  • 对于第二点,您可以在动作方法中执行类似的操作

只是想一想,当用户进入
Login
Register
页面时注销用户。 希望您没有在私人页面上提供任何链接,用户可以进入
登录
注册

页面或检查用户是否经过身份验证将其重定向到
主页
页面,坦率地说,您不能阻止用户编写
URL
并按下
输入
按钮,也不能只通知
如果您进入任何页面
,您都将注销

只是一个想法,当用户进入
Login
Register
页面时,注销用户。 希望您没有在私人页面上提供任何链接,用户可以进入
登录
注册

页面或检查用户是否经过身份验证将其重定向到
主页
页面,坦率地说,您不能阻止用户编写
URL
并按下
输入
按钮,也不能只通知
如果您进入任何页面
,您都将注销

使用AccountCreated的场景是什么?这是一个操作还是控制器上的一个方法?这是一个操作。这是在成功注册后显示的页面,通知用户他们将发送的电子邮件以验证新帐户。使用AccountCreated的场景是什么,这是控制器上的一个操作还是一个方法?这是一个操作。它是在成功注册后显示的页面,通知用户他们正在发送电子邮件以验证新帐户。