アクションがユーザーにサインアウトして自分自身にリダイレクトすると、「ページがリダイレクトされません」というエラーが表示されます。リダイレクトが返された後、アクションが再度呼び出されますが、Request.IsAuthenticatedはfalseの代わりにtrueです。Request.IsAuthenticatedは、FormsAuthentication.SignOut()を呼び出してページにリダイレクトした後もまだtrueです。
私はコード内のすべてのFormsAuthentication.SetAuthCookie呼び出しにブレークポイントを設定しましたが、それらのどれもがヒットしませんでした(ユーザーを再認証するコードがないことを確認したい)。
public ActionResult MyAction() {
if (Request.IsAuthenticated) {
try {
// Check some stuff put into the session when the user
// is authenticated
} catch {
Session.Abandon();
FormsAuthentication.SignOut();
return Redirect("http://localhost/MyController/MyAction");
}
}
}
私がFirefoxの11.0を使用していて、これはFireFoxの問題で完全に可能であり、それはChromeで動作しているようです。誰がなぜこれが起こっているのか知っていますか?
私は単純なプロジェクトにこれをまだ分けていません。私はこれが私が行方不明の単純なものであることを望んでいました。
私は、入ってくるリクエストを監視し、メインサイトとは別の認証Cookieを持つURLにリダイレクトするUrlRewriterがあることにも言及する必要があります。これが問題だろうか?
Ex。
// cookiePath: "/"
http://localhost/MyApp/CustomPortal/index/CustomPage
変更:
// cookiePath: "/CustomPortal"
http://localhost/MyApp/SpecialRequestController/Render?appName=CustomPortal&pagePath=public/CustomPage
ユーザーがMyAppのに認証され、cookiePathは "/" であるが、ユーザが書き換えられたURLの下で認証する場合、cookiePathは "/ CustomPortal" です。
ありがとうございました!
理由の一つかもしれない私は、現在のUser.Identity.Nameをチェックするだろう - それは、Windowsが万が一アカウント名ですか?セッションが期限切れになったのは同じユーザーですか?フォームの認証Cookieを削除するには、Cookieのヘッダーが下に来ていることを確認してください。フォームをロードして、formsauth.SignOut()のヘッダーを監視します。 (よくリクエストの最後に) –
できれば試してみます。残念ながら、私はこれを一貫して再現する方法を考え出していません。私はそれがChromeで正常に動作するので、FireFoxの問題だと思う。私は質問を書いてFFに戻ってページをリロードしたので、FFが実際にクッキーを期限切れにするのに時間がかかるようです。 –