PasswordRecovery
.NET 4 Web フォーム アプリのコントロールに問題があります。ASP.NET メンバーシップ プロバイダーとフォーム認証を使用しています。Windows 2008R2 サーバーで IIS7 を実行しています。
アプリが会社のネットワーク内の Win2K8 サーバーで実行されている場合はすべて正常に動作しますが、アプリが Rackspace またはクライアントの Win2K8 ボックスに展開されている場合、私のResetPassword.aspx
ページは302 "Object Moved"Login.aspx
応答を受け取り、その後、私のページにリダイレクトされます。パスワードの再設定メールを送信しないでください。
Fiddler のレポートは次のとおりです。
Fiddler からの応答ヘッダーの詳細は次のとおりです。
標準の Account ディレクトリにすべてのログイン ページとパスワード ページがあり、独自のものがありweb.config
ます。
web.config
Account ディレクトリの は次のとおりです。
<?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>
Rackspace ボックスで telnet を使用してメール サーバーとポートに ping を実行できるので、これが SMTP の問題だとは思いませんが、ResetPassword ページを実行すると、まだ 302 が返されます。また、会社のネットワーク内のサーバーではすべて正常に動作します。
また、Account ディレクトリには、Rackspace サーバーに対する完全な権限があります。
この SO answerを確認しました。これは、302 を取得しているページへの匿名アクセスを許可するように修正するソリューションを提供しますweb.config
が、私の Accounts フォルダーはそこにあるすべてのページへのすべてのアクセスを許可します。その答えのもう1つの解決策は、 MVCルーティングを使用し<modules runAllManagedModulesForAllRequests="true">
てweb.config
いないため、ここで適用できるかどうかわかりません。(ただし、これについて修正していただければ幸いです!)
Rackspace サーバーに調査が必要なファイル権限またはユーザー権限がありますweb.config
か?
私はこれについて非常に近いクライアントの締め切りに直面しているので、本当に助けが必要です. ありがとう!
アップデート。リクエストにより投稿されたその他のコード:
PasswordRecovery コントロール マークアップは次のとおりです。
<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";
}