如何让ASP.NET自动将未登录的Forms用户重定向到登录页面?

Ian*_*oyd 14 asp.net

我有一个ASP.NET网站.

我希望未登录的用户被自动(重新)定向到登录页面,例如,

~/Account/Login.aspx
Run Code Online (Sandbox Code Playgroud)

就像现在一样,用户default.aspx无需登录即可访问页面(例如).


注意:我正在操作(可能是错误的)假设ASP.NET在每个(和任何)页面加载之前都有自己的身份验证周期.


更新 @asawyer提供了一个链接,虽然没有帮助回答问题,但确实提供了一个漂亮的图形:

在此输入图像描述

嗯,你有什么尝试?

我有一个web.config启用窗体身份验证的文件:

<?xml version="1.0"?>
...
<configuration>
   ...
   <system.web>
      <authentication mode="Forms">
         <forms loginUrl="~/Account/Login.aspx" name=".ASPXFORMSAUTH" slidingExpiration="true"/>
      </authentication>
      ...
   </system.web>
   ...
</configuration>
Run Code Online (Sandbox Code Playgroud)

当我浏览到"默认"页面时,我能够查看它,例如,

GET http://localhost:53149/WebSite/ HTTP/1.1
Host: localhost:53149
Run Code Online (Sandbox Code Playgroud)

我得到的页面内容:

HTTP/1.1 200 OK
Server: ASP.NET Development Server/10.0.0.0
Run Code Online (Sandbox Code Playgroud)

换句话说,而不是被强迫登录到的网站,我不是被迫在登录到Web站点.

这可能与我的浏览器在本地运行到Web服务器的事实有关; 但我正在使用Forms,而不是Windows(Passport而不是None)认证.

奖金阅读

Ian*_*oyd 27

我找到了答案.

问题:如何自动将未登录的用户重定向到登录页面?
答:拒绝匿名用户访问


更长的解释

为了自动将未登录的用户重定向到登录页面,您需要拒绝匿名访问"所有"页面.这是在站点的web.config文件中完成的:

web.config中

<?xml version="1.0"?>
<configuration>
   <system.web>
      ...
      <authorization>
         <deny users="?"/>
      </authorization>
   </system.web>
</configuration>
Run Code Online (Sandbox Code Playgroud)

特殊?标记来表示匿名用户.

这与"告诉表单身份验证" 相结合,其中"登录"页面为:

<?xml version="1.0"?>
<configuration>
   <system.web>
      ...
      <authentication mode="Forms">
         <forms loginUrl="~/Account/Login.aspx" timeout="2880"/>
      </authentication>
      <authorization>
         <deny users="?"/>
      </authorization>
   </system.web>
</configuration>
Run Code Online (Sandbox Code Playgroud)

意味着任何任何匿名用户都将自动重定向到登录页面.


一个似乎从未被问过的问题得到了回答,每个人都活着.