2015-10-03 22 views
7

私はカスタム属性についていくつかの調査を試みましたが、まだまだわかりません....Authorizeのようなfalseを返すLoginにリダイレクトするカスタム属性を作成する方法 - ASP.NET MVC

私は..ユーザー・ログの中にいったんセッションクッキー(元のユーザーID)で、ユーザーのいくつかの重要な詳細情報を格納していると私がしたいすべてがどこ

かの属性を作成することです if (Session["UserID"] == null)

[Authorize]属性のようにログインするようにリダイレクトされます。そうすれば、私はこの属性をどこでもコントローラレベルで適用できます。

Authorize属性を上書きする必要がありますか?新しいものを作成しますか?リダイレクトしてログインするにはどうすればよいですか?

は、私はまた、あなたがカスタムAuthorizeAttributeを作成して、必要に応じてAuthorizeCore()HandleUnauthorizedRequest()を上書きすることができます任意の助け

+0

あなたは確かに([ 'IAuthorizationFilter'](https://msdn.microsoft.com/を実装すなわち種類をカスタム認証フィルタを定義することができますen-us/library/system.web.mvc.iauthorizationfilter%28v = vs.100%29.aspx))しかし、あなたの質問は非常に広いです:あなたが達成したいものをはるかに良く定義する必要があります。 – Richard

+0

申し訳ありませんが、誰かに私のためにそれをコード化させようとしているわけではありません。 – user1189352

+0

@リチャード私はそれが私が必要としていたものだと思います。したがって、IAuthorizationFilterを実装すると、失敗した場合、[許可]のようにログインにリダイレクトされますか?私はそれが私が最も探しているものだと思う。 – user1189352

答えて

13

のためにASP.NET MVC 4

感謝を使用しています。チェックを行い、必要に応じてリダイレクトする独自のロジックを追加します。

私はちょうど

public class VerifyUserAttribute : ActionFilterAttribute 
{ 
    public override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     var user = filterContext.HttpContext.Session["UserID"]; 
     if (user == null) 
      filterContext.Result = new RedirectResult(string.Format("/User/Login?targetUrl={0}",filterContext.HttpContext.Request.Url.AbsolutePath)); 
    } 
} 

が適切後に/User/LoginアクションメソッドでSession["UserID"]変数を設定することを忘れないでください(認証/認可を行うのに最適な場所ではありません)MVCのActionFilterAttributeを使用して簡単な例を示していますユーザー検証。

+0

こんにちはこれをありがとう。だから私が調べる必要があるのは、ActionFilterAttributeを取り込む代わりに、AuthorizeAttributeのためにそれをどうやって行うべきかを調べることです。それが正しいとすれば、私は何をする必要があるのか​​良いアイデアを得ました。ありがとう! – user1189352

+0

@ user1189352認証ヘッダーと他の種類の標準検証を使用しない場合でも、これはうまく動作します(実行して一度だけチェックします)。しかし、私はあなたができる場合は、AuthorizeAttributeを使用する標準的なプラクティスに従うことをお勧めします。 –

+0

私は認証ヘッダーを使用します。私はすべての私のコントローラのために(あなたが意味するものなら)[Authorize]を置く。その場合、Authorize属性のオーバーロードを調べる方が良いでしょうか? – user1189352

8

IAuthorizationFilterインターフェイスを実装すると、独自のバージョンのAuthorizeアトリビュートを作成できます。ここでは例です:

class MyCustomFilter : FilterAttribute, IAuthorizationFilter 
{ 
    public void OnAuthorization(AuthorizationContext filterContext) 
    { 
     if (filterContext.HttpContext.Session["UserID"] == null) 
     { 
      filterContext.Result = new RedirectResult("/"); 
     } 
    } 
} 

と使用例:

[MyCustomFilter] 
public ActionResult About() 
{ 
    ViewBag.Message = "Your application description page."; 

    return View(); 
} 
+0

そんなに簡単?大丈夫ですか? – user1189352

+1

はい、それは簡単です:)ここからもっと多くのことを学ぶことができます:http://www.asp.net/mvc – Nasreddine

+0

ちょっと気になるのは、依存関係の注入はコンストラクターを使ってそのようにすることができないことです。 DIが必要な場合は、この回答をご覧ください:http://stackoverflow.com/questions/16708942/should-i-be-using-an-iauthorizationfilter-if-i-wish-to-create-an-apikey-restrict –

関連する問題