0

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

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

私は何を間違っていますか?

4

2 に答える 2

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要求された領域が許可されていない場所であるかどうかを確認するように定義します。

于 2009-08-30T13:23:36.327 に答える
1

これをサポートするドキュメントがどこにあるかわかりません。この回答は、私が書いたアプリで見た動作の観察に基づいています。

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

ジレンマを解決するには、ラベルを追加する必要があり (私は lblError と呼びます)、Page_Load に次を追加します (C# サンプル コード)。

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


}

追加した

さらに考えてみると、ログイン ページにエラーがないのは、ユーザーがログイン ページ内ではなく、保護されたページにアクセスしようとしたときにエラーが発生したためです。

ただし、私の提案はあなたの状況にも当てはまると思います。

于 2009-08-30T13:17:50.560 に答える