2011-08-11 12 views
1

ユーザーのアカウントが有効になっているかどうかを確認するカスタム属性を作成します。私は何とか現在のユーザーのユーザー名を取得する必要があります。私はFormsAuthentication.SetAuthCookie()を使用してユーザーにログインしています。ユーザーがアクティブになっているかどうかを確認するカスタム属性

コントローラメソッドでは、許可されていない特定のルートにリダイレクトします。これはこのようにすることができますか?これが私のやり方です。

public class ActivatedAuthroizeAttribute : System.Web.Mvc.AuthorizeAttribute 
{ 
    protected override void HandleUnauthorizedRequest(System.Web.Mvc.AuthorizationContext filterContext) 
    { 
     // Check to see if user is authorized. 
     DefaultUnitOfWork unitOfWork = new DefaultUnitOfWork(); 
     //User user = UnitOfWork.UserRepository.IsUserActivated(FormsAuthentication.GetAuthCookie(.Value["Username"]); 

     base.HandleUnauthorizedRequest(filterContext); 
    } 

答えて

2

ユーザーが認証されていない場合は、次のコードを使用してユーザーをリダイレクトしました。これは、「OnActionExecuting」メソッドをオーバーライドしてコントローラとアクションが認証されていない場合に変更することによって行われます。この例は、デフォルトのmvcログインページ/ Account/LogOnへのリダイレクトを示しています。

public class RequiresAuthenticationAttribute : ActionFilterAttribute 
{ 
public override void OnActionExecuting(ActionExecutingContext filterContext) 
{ 
    //You can put your check here. This particular 
    //check is for default asp.net membership authentication 

    if(!filterContext.HttpContext.User.Identity.IsAuthenticated) 
    { 
     RedirectToLogin(filterContext); 
    } 
} 

private void RedirectToLogin(ActionExecutingContext filterContext) 
{ 
    var redirectTarget = new RouteValueDictionary 
    { 
     {"action", "LogOn"}, 
     {"controller", "Account"} 
    }; 

    filterContext.Result = new RedirectToRouteResult(redirectTarget); 
    } 
} 

編集:もちろん、あなたのコントローラクラスの最上部に、この属性を置くが、あなたはそれを知っていた... :)

[RequiresAuthentication] 
public class HomeController : Controller 
{ 
    // code... 
} 
関連する問題