2

こんにちは私はカスタムロールプロバイダーを使用していますが、すべてが正常に機能しているようです。ユーザーが許可されている場合は許可されていますが、許可されていない場合はログインページにリダイレクトされます。

しかし、私が知りたかったのは、彼らがログインページにリダイレクトされたときに、ログインページにアクセスが拒否されたなどのメッセージを設定する方法があるということです。たとえば、次のようなものが必要です、User.FailedCustomRole?このようなものがオブジェクトのどこかに存在するかどうかはわかりません。

    [AllowAnonymous]
    public ActionResult Login()
    {
        if (User.FailedCustomRole) {
            ViewBag.Message = "No access to this page";
        }
        return View();
    }

ありがとう

4

1 に答える 1

2
  • 1つの方法は、web.configを変更して、パラメーター1のログオンページにユーザーをリダイレクトすることです。

ログオンアクションを変更してnull許容整数を取得し、設定されている場合は、modelstateエラーを追加します

   public ActionResult LogOn(int? id)
    {
        //int id = Request.QueryString[;
        if (id != null)
        {
            LogOnModel model = new LogOnModel();
            ModelState.AddModelError("", "Please Login to use this page");

            return View(model);
        }
  • 2番目の方法は、ログインをチェックし、Viewbag.LoginErrorの設定をリダイレクトするアクションフィルターを作成することです。

    public class CheckLoginFilterAttribute : ActionFilterAttribute
    {
        public override void onactionexecuting(ActionExecutedContext filterContext)
        {
                    if (Membership.GetUser() != null)
                    {
                 Viewbag.LoginError = "Please Login to use this page";
                filterContext.Result = new RedirectToRouteResult(
        new System.Web.Routing.RouteValueDictionary {
            {"controller", "Account"}, {"action", "Logon"}
                    }
            {
    
            }
        base.OnActionExecuted(filterContext);
    }   
    

    ログインページに、を表示するdivを追加します@(Viewbag.LoginError)。これにより、入力されていない場合は空白になります。

  • 3番目の方法は、V @(ViewData["LoginError"]にエラーメッセージをリダイレクトして設定するカスタム認証フィルターを作成することです。

ログインページに、を表示するdivを追加します@(ViewData["LoginError"]。これにより、入力されていない場合は空白になります。

この最後の方法については、確信が持てないか、快適ではないことに注意してください。

于 2013-02-06T23:04:50.883 に答える