2009-08-30 11 views
0

私はASP.NETロール/メンバーシップベースフォーム認証サイトを持っています。特定の役割だけがアクセスできるサブフォルダとそのページがあります。問題は、ログインページに許可されていない役割グループログインのユーザーが存在する場合、ログインページにエラーメッセージが表示されないことです。つまり、AllowedRoleログインからのユーザーの場合、ログインページは保護されたページにユーザーを正しくリダイレ​​クトしますが、NonAllowedRoleのユーザーがログインしようとすると正しくログインしますが、エラーメッセージは表示されず、ユーザーは元に戻ります情報なしでログインページにアクセスできます。 FailureTextがログインフォームに設定されていますが、表示されません。 loginForm.LoginErrorイベントも発生しません。このコードを試しましたが、どちらも表示されません:ASP.NETのロールベース認証のログインエラーテキストがありません

protected void frmLogin_LoggedIn(object sender, EventArgs e) 
     { 
      if (!User.IsInRole("AllowedRole")) 
       frmLogin.FailureText = "Access denied."; 
       //Label1.Text = "Access denied."; //doesn't work either 
     } 

私は間違っていますか?

答えて

1

私はこれをサポートするための文書がどこにあるか分かりません。この回答は、私が書いたioアプリで見た振る舞いの観察に基づいています。

ログインページは、許可されたアクセスルールから除外されています。それが必要です。サイト全体がルートレベルであっても匿名ユーザーを許可しないサイトがあるとします。ユーザーがログインできるようにログインページにアクセスできる必要があります。

ジレンマを解決するには、ラベル(lblErrorと呼ぶ)を追加し、Page_Loadに次のコードを追加する必要があります(C#サンプルコード):このより多くの思考をGving

if(User.IsLoggedIn) 
{ 
    If(!User.IsInRole("AllowedRole") 
    { 
     lblError.Text = "Access denied."; 
    } 


} 

追加

、エラーがログインページには存在しない理由は、ユーザーが保護されたページにアクセスしようとすると、エラーが起こっているということです、ログインページ内ではありません。

しかし、私の提案はあなたの状況にも役立つと思います。あなたがすることができるもので

2

はにreturnurlクエリ文字列パラメータをチェックし、それはあなたがフォルダを「拒否」だ場合、エラー・ページまたは許可されたログインページのいずれかにユーザーをリダイレクトしています。このように:

protected void frmLogin_LoggedIn(object sender, EventArgs e) 
{ 
    if (!User.IsInRole("AllowedRole") && 
     InRestrictedArea(Request.QueryString["ReturnUrl"])) 
    { 
     Response.Redirect("Not-Allowed-Here.aspx"); 
    } 
} 

それらが許可されていないところ要求されたエリアがあるかどうかを確認するためにInRestrictedAreaを定義します。

+2

+1いい考えです。それでも、私はまだ彼がUser.IsLoggedInをチェックすべきだと思うが、うまくいくだろう。私たちの答えの組み合わせは、自分自身でよりも良いと思います。 – David

関連する問題