如何在有效登录时显示Asp.net页面?

时间:2013-11-15 16:56:46

标签: c# asp.net .net

我已创建登录信息。如果用户成功登录,则Welcome UserName | Logout会向用户显示。现在,如果用户登录产品页面对用户可见,则必须隐藏它。

<?xml version="1.0" encoding="utf-8" ?>
<items>
  <item Text="Home" NavigateUrl="Default.aspx" />
  <item Text="Products" NavigateUrl="Products.aspx"  />
  <item Text="Downloads" NavigateUrl="#"  />
  <item Text="Support" NavigateUrl="#"  />
</items>

<div class="headerMenu">
 <div class="headerTop">
  <div class="templateTitle">
    <a ID="TitleLink" runat="server" href="~/">Project</a>
  </div>
  <div class="loginControl">
    <asp:LoginView ID="HeadLoginView" runat="server" EnableViewState="False">
    <AnonymousTemplate>
     <a ID="loginLink" runat="server" href="~/Account/Login.aspx">Log In</a> |
     <a ID="registerLink" runat="server" href="~/Account/Register.aspx">Register</a>
    </AnonymousTemplate>

    <LoggedInTemplate>
     Welcome <span class="bold">
     <asp:LoginName ID="HeadLoginName" runat="server" />
     </span>! [
      <asp:LoginStatus ID="HeadLoginStatus" runat="server" LogoutAction="Redirect" 
           LogoutPageUrl="~/" LogoutText="Log Out" /> ]
    </LoggedInTemplate>
    </asp:LoginView>
   </div>
  </div>

2 个答案:

答案 0 :(得分:1)

有很多方法可以实现这一目标,但我建议在开发身份验证之前先查看ASP.NET Forms Authentication。授权框架自己。 Forms Auth是一个well-documented安全可靠的解决方案。您可以使用默认功能或扩展它以满足您的需求。

答案 1 :(得分:1)

正如您所说,您已经创建了登录名,此答案假定您已在应用程序中设置了表单身份验证。

在ASP.NET Web表单中,限制对页面和托管资源的访问通常是通过将您希望仅对经过身份验证的用户可用的那些分组到一个或多个目录中,然后在Web中使用authorization element来完成的。 .config文件的目录/目录。

元素可以指定您希望允许访问页面或托管资源的用户或角色。

MSDN页面中的此示例允许以“管理员”角色访问用户,并拒绝访问所有其他用户。

<configuration>
   <system.web>
      <authorization>
         <allow roles="Admins"/>
         <deny users="*"/>
      </authorization>
   </system.web>
</configuration>

将需要保护的页面分组到一个或多个目录中(每个目录都有一个定义授权属性和允许/拒绝规则的子web.config文件),因为配置文件具有级联性质。应用程序web.config文件会覆盖machine.config,并且它本身会被子目录中的匹配规则覆盖,这些规则本身会被另一个子目录中的匹配规则覆盖 - 依此类推。

目录中的web.config文件与应用程序的根目录中的文件不同 - 只是包含您希望从应用程序根目录覆盖的那些元素。在这种情况下授权。

因此,您的网站最终可能会结构有点像 -

 -Application root
  -Index.aspx (home page)
  -Login.aspx
  -About.aspx
  -Contact.aspx
   --Products
    --Index.aspx (Products page)
    --Order.aspx
   --Admin
    --ManageProducts.aspx

如果您在同一目录中混合使用页面或资源,并且希望保护某些页面或资源而不保护其他页面或资源,则可以使用location element根据路径将不同的规则应用于不同的文件。这看起来像这样 -

<configuration>
   <location path="Products.aspx">
      <system.web>
         <authorization>
            <allow roles="Customers" />
         </authorization>
      </system.web>
   </location>
</configuration>

不幸的是,每个页面/路径都需要单独的位置规则,因此 - 根据您的需要 - 您可能希望将整个应用程序的授权设置为受限制,并允许访问您需要的那些页面上的所有用户使用位置元素。例如,您可能希望对主页和登录页面执行此操作(尽管ASP.NET将允许默认访问您定义的登录页面。)

有关在ASP.NET Web表单中实现安全性的更多信息,请参阅http://www.asp.net/web-forms/tutorials/security

在ASP.NET MVC中(基于代码示例,它似乎没有使用)同样的事情是将[Authorize]属性放在控制器上,或者放在控制器内的各个动作上。与授权属性一样,我们可以指定单个用户和角色。例如 -

[Authorize(Roles = "Customers")]
public ActionResult Products() 
{
   return View();
}

有关ASP.NET中表单身份验证的详细信息,请参阅http://www.asp.net/mvc/tutorials/older-versions/security/authenticating-users-with-forms-authentication-cs