如何使用表单身份验证将用户重定向到密码恢复页面

3
我是一个asp.net的初学者。我目前有一个登录页面,底部有一个忘记密码的链接按钮。我还使用表单身份验证来防止未经授权的用户访问其他页面。身份验证似乎工作良好,除了一件事情。它阻止用户在点击链接按钮后访问密码恢复页面。如何允许所有用户访问登录/密码页面,并在未经身份验证时防止他们查看其他页面?
下面的代码是为了防止其他匿名用户查看没有权限的页面。但我不知道如何允许他们访问密码恢复页面...
<authentication mode="Forms">
  <forms loginUrl="/Presentation/Display/Login.aspx" name=".ASPNETAUTH" protection="All" path="/" timeout="120" cookieless="UseDeviceProfile" slidingExpiration="true"/>
</authentication>
<!-- This section denies access to all files in this application except for those that you have not explicitly specified by using another setting. -->
<authorization>
  <deny users="?"/>
</authorization>
3个回答

5
您需要使用<location>元素来针对特定路径应用设置,然后为非登录用户添加<allow />
例如:
<location path="PasswordRecovery.aspx">
    <system.web>
        <authorization>
            <allow users="?" />
        </authorization>
    </system.web>
</location>

那么我应该把这段代码放在Web配置文件的哪里?在<authentication mode="forms">下面还是上面? - DEN
@DEN:在底部。http://msdn.microsoft.com/en-us/library/b6x6shw7.aspx <location>元素为特定文件夹或文件添加(几乎)任意新配置。 - SLaks
@slarks,我仍然无法访问密码恢复页面。URL变成了http://localhost:4772/Presentation/Display/Login.aspx?ReturnUrl=/Presentation/Display/PasswordRecovery.aspx,但页面仍停留在login.aspx。 - DEN
@DEN:你在<location>元素中输入了正确的应用程序相对路径吗? - SLaks
@slarks,是的,我写了。回到我发布的代码上看,我有没有写错什么?<authorization>不应该被写两次吗?一个在<authentication form>下面,一个在<location path...>下面? - DEN

2
<location path="Presentation/Display/PasswordRecovery.aspx">
  <system.web>
    <authorization>
      <allow users="?"/>
    </authorization>
  </system.web>
</location>

这允许未登录用户查看您的密码恢复页面。您可能希望对存储CSS和/或图像资源的目录执行相同操作,以防它们被登录页面和/或恢复页面所需。


谢谢回复,但我应该把这段代码放在WebConfig的哪个位置? - DEN

2

使用位置:

<location path="passwordrecovery.aspx">
   <system.web>

      <authorization>
          <allow users="*"/>
      </authorization>
   </system.web>
</location>

在与 system.web 同级别的位置,显然不在该元素之内。它本质上是一个一级元素。 - Brian Mains

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接