2011-06-28 7 views
2

MVC3アプリケーションでは、スプラッシュ画面を表示するときにjQueryのajaxメソッドを使用して動的に部分ビューをロードし、htmlをDOMに注入する状況がいくつかあります。ajaxリクエスト中にMVCフォーム認証の有効期限を処理する

認証が期限切れになり、ユーザーがajax呼び出しを開始すると、呼び出されるアクションがログインページにリダイレクトされるため、ログインページのhtmlが返され、明らかにDOMに注入されますユーザーにとって非常に混乱することになります。

どのように人々はこのような状況に対処しますか?私はそれがフォームauthとhtmlのためのajax要求が私がたくさんする何かであることが一般的だと思います。

答えて

3

この問題の解決策はいくつかあります。here。私は次のようにあなたがそれを使用することができ、私はまさにこのような状況のために書いたAuthorizeAjaxアクションフィルタである。ここ溶液中で3

+0

歓声、そのうちの一つが適しているだろう、私は、ヘッダーのソリューションは、あなたが原因をFormsAuthenticationモジュールを返されて302で終わるしないでください最高のほか – jcvandan

2

をレスポンスヘッダのソリューションを好む:

[AuthorizeAjax] 
public ActionResult GetNewData() 
{ 
    //controller logic here 
} 

プロジェクトに以下を追加することによりあなたが必要とするのは共有フォルダ内の "AjaxAccessError"という部分的なビューです。個人的に、私は実際のログオンページへのリンクを返します:)

これは役に立ちます。ポインタのための

namespace System.Web.Mvc 
{ 
    public class AuthorizeAjaxAttribute : AuthorizeAttribute 
    { 
     private bool _failedAuthorisation; 

     protected override bool AuthorizeCore(HttpContextBase httpContext) 
     { 
      if (!httpContext.User.Identity.IsAuthenticated) 
      { 
       _failedAuthorisation = true; 
       return false; 
      } 
      else 
      { 
       String[] RoleArray = Roles.Split(','); 
       foreach (var r in RoleArray) 
       { 
        if (httpContext.User.IsInRole(r)) 
        { 
         _failedAuthorisation = false; 
         return true; 
        } 
       } 

       _failedAuthorisation = true; 
       return false; 
      } 
     } 

     public override void OnAuthorization(AuthorizationContext filterContext) 
     { 
      base.OnAuthorization(filterContext); 

      if (_failedAuthorisation) 
      { 
       filterContext.Result = new PartialViewResult { ViewName = "AjaxAccessError" }; 
      } 
     } 
    } 
} 
+0

ことに同意しますか? –

関連する問題