我的.NET 4 Web窗体应用程序上的PasswordRecovery
控件出现问题。我正在使用ASP.NET成员资格提供程序和表单身份验证。我在Windows 2008R2服务器上运行IIS7。
当应用程序在我的公司网络内的Win2K8服务器上运行时,一切正常,但当应用程序部署到Rackspace或客户端Win2K8框时,我的ResetPassword.aspx
页面会获得 302“对象移动“响应,然后重定向到我的Login.aspx
页面,并且不会发送重置密码电子邮件。
以下是Fiddler报道的内容:
以下是Fiddler的响应标题详细信息:
我在标准帐户目录中拥有所有登录名和密码页,并且有自己的web.config
:
以下是帐户目录的web.config
:
<?xml version="1.0"?>
<configuration>
<system.web>
<authorization>
<allow users="*"/>
</authorization>
</system.web>
</configuration>
以下是该应用的web.config
部分(我在适当的地方缩短了它们):
<authentication mode="Forms">
<forms name=".ASPXAUTH" loginUrl="~/Account/Login.aspx"
defaultUrl="~/"
protection="All"
cookieless="UseDeviceProfile"
enableCrossAppRedirects="false" />
</authentication>
<membership defaultProvider="MyCustomMembershipProvider">
<providers>
<clear />
<add connectionStringName="MyString"
enablePasswordRetrieval="false"
enablePasswordReset="true"
requiresQuestionAndAnswer="false"
applicationName="/"
name="MyCustomMembershipProvider"
type="MyCustomMembershipProviderType" />
</providers>
</membership>
<authorization>
<deny users="?" />
</authorization>
我不相信这是一个SMTP问题,因为我可以使用Rackspace框上的telnet成功ping邮件服务器和端口,但是当我运行ResetPassword页面时,我仍然得到302。 此外,我公司网络内的服务器上的一切正常。
此外,帐户目录在Rackspace服务器上具有完全权限。
我查看了this SO answer,它提供了修复web.config
的解决方案,允许匿名访问获取302的页面,但我的“帐户”文件夹允许对该页面中的每个页面进行所有访问。该答案中的另一个解决方案与关闭我<modules runAllManagedModulesForAllRequests="true">
中的web.config
有关,我不确定在这里适用,因为我没有使用MVC路由。 (尽管如此,我很乐意对此予以纠正!)
Rackspace服务器上是否有一些我需要查看的文件权限或用户权限,或者我在web.config
中遗漏了什么?
我面临着非常密切的客户截止日期,所以我真的可以使用一些帮助。谢谢!
更新。更多代码按要求发布:
PasswordRecovery Control Markup在这里:
<asp:PasswordRecovery ID="PasswordReset"
runat="server"
EnableViewState="false"
ClientIDMode="Static"
RenderOuterTable="false"
onverifyinguser="OnVerifyingUser"
onsendingmail="OnSendingMail">
<UserNameTemplate>
<!-Here is there is just two Label and Input pairs.
One pair for user email, one pair for their db instance -->
</UserNameTemplate>
</asp:PasswordRecovery>
OnSendingMail功能在这里:
protected void OnSendingMail(object sender, MailMessageEventArgs e)
{
e.Message.Subject = "MySubject";
e.Message.IsBodyHtml = true;
e.Message.Body = "ItsHtmlInRealLife";
}
答案 0 :(得分:0)
这是我在你的问题中注意到的。 web.config应该如下所示 -
它基本上限制匿名访问〜/ Account文件夹内的每个页面,除了三个页面 - Login.aspx,ResetPassword.aspx和Register.aspx。
<?xml version="1.0"?>
<configuration>
<location path="Login.aspx">
<system.web>
<authorization>
<allow users="*"/>
</authorization>
</system.web>
</location>
<location path="ResetPassword.aspx">
<system.web>
<authorization>
<allow users="*"/>
</authorization>
</system.web>
</location>
<location path="Register.aspx">
<system.web>
<authorization>
<allow users="*"/>
</authorization>
</system.web>
</location>
<system.web>
<authorization>
<deny users="?"/>
</authorization>
</system.web>
</configuration>
删除授权标记。基本上,您要说您网站中的所有页面都需要登录。
这不是一种正确的做法;您至少需要Home Page和Login.aspx才能匿名访问。
<authorization>
<deny users="?" />
</authorization>
答案 1 :(得分:0)
问题在于我们的一些自定义成员资格提供程序代码,以及我们在远程服务器上的错误记录。这不是web.config的问题。感谢大家帮忙。