将ASP.NET表单身份验证从.NET 2更改为.NET4

4
这是我的web.config中的表单身份验证部分:

<authentication mode="Forms">
  <forms name="security" path="/" loginUrl="default.aspx" protection="All" timeout="360" />
</authentication>

<authorization>
  <deny users="?" />
</authorization>

由于更改为 .net 4 后,现在我的表单身份验证需要用户登录两次才能进行重定向。是否有其他人遇到过这个问题?
我的登录页面位于主页上,因此我尝试了下面的方法,认为我只需要将登录页面设置为公共页面即可,但是它并没有起作用。是否有其他人也遇到了这个问题?
我注意到,一旦我访问主页,就会在网址中出现 default.aspx?ReturnUrl=%2f,如果我删除 ReturnUrl 参数,则可以在第一次登录时运行。但是如果查询字符串中有 ReturnUrl,则第一次访问站点时我必须登录两次。
因此,我将页面添加到我的位置的公共访问中,但这没有帮助。
<location path="default.aspx">
<system.web>
  <authorization>
    <allow users="*" />
    <deny users="?" />
  </authorization>
</system.web>


通常情况下,您不需要为在Forms Auth标记中指定的登录页面设置位置标记。话虽如此,您是否有一个可以设置的页面,可以输出像User.Identity.IsAuthenticated这样的内容,以查看用户是否已经通过身份验证?您的问题只是没有在登录后重定向到正确的URL吗?还是您无法成功登录? - Nick Bork
%2f = url编码的'/'。您是否指定了returnURL,或者正在使用URL重写? - Pleun
这提示我们注意,默认页面可能应该是与登录页面相同的页面。 - Nick Bork
2个回答

2
当您的URL是这样的:default.aspx?ReturnUrl =%2f,在登录后,它会重定向回到默认页面,即默认页面。如果您在默认页面添加了代码:
If (this.User.Identity.IsAuthenticated)
{
    Response.Redirect("somepage.aspx");
}

这个问题会消失的。不是因为他们需要登录两次,而是因为他们一直回到默认页面。

1
IIS服务器管理器的设置将默认文档设置为Login.aspx页面。Web.config中的Forms标记将defaulturl设置为默认页面。我在IIS服务器管理器中删除了登录页面作为默认页面,问题就解决了。对我来说,看起来像是IIS管理器应该更新web.config文件中的标记,这似乎是一个错误。与其在页面加载时进行重定向,我宁愿选择这种修复方式,因为它更安全。
因此,在这种情况下,您需要将loginurl = login.aspx和defaulturl = pageafterlogin.aspx更改,并且在服务器上没有默认值,就没有问题了。

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