1

ここでサンプルコードをテストしていますhttp://mywsat.codeplex.com/

彼らの例では、adminページまたはmembers個別のリンクを使用してページにログインするためのさまざまなボタンがあります

ただし、ランディング ページへの単一のリンクを使用しようとしており、ユーザーがログインした後、分離コードを使用して関連ページにリダイレクトします。ランディング ページにはログインが必要ですが、すべてのロールがルールで設定されたこのページを表示できます。

ランディングページ.aspx:

protected void Page_Load(object sender, EventArgs e)
    {
        string redirectPath;
        string pagePath = Request.AppRelativeCurrentExecutionFilePath;
        if (Page.User.IsInRole("Administrator"))
        {
            //Admin
            redirectPath = "~/admin/Default.aspx";
            if (redirectPath != pagePath)
            {
                Response.Redirect(redirectPath);
            }
        }
        else if (Page.User.IsInRole("Member"))
        {
            //Members
            redirectPath = "~/members/Default.aspx";
            if (redirectPath != pagePath)
            {
                Response.Redirect(redirectPath);
            }
        }
        else if (Page.User.IsInRole("Trial"))
        {
            //Trial
            redirectPath = "~/trial/Default.aspx";
            if (redirectPath != pagePath)
            {
                Response.Redirect(redirectPath);
            }
        }
        else
        {
            //Non member
            redirectPath = "~/Default.aspx";
            if (redirectPath != pagePath)
            {
                Response.Redirect(redirectPath);
            }
        }
    }

問題は、Page_Load イベントがすぐに発生し、イベントlogin-with-captcha.ascxが発生した後に起動することです。

それで、コードをログインフォームに移動しlogin-with-captcha.ascx.csてリダイレクト しましたが、無限ループでe.Authenticated = true;リダイレクトされますlogin-with-captcha.ascx

login-with-captcha.ascx.cs:

       // Next, determine if the user's username/password are valid
        if (Membership.ValidateUser(loginUsername, loginPassword))
        {
            e.Authenticated = true;
            //tried redirecting from here based on role!
        }
        else
        //............

ユーザーが検証された後、ランディング ページからリダイレクトするにはどうすればよいですか? ポストバックと関係があるのではないかと思いますが、助けが必要です

4

1 に答える 1

1

Page_Load 内の最初の行として次を追加して、役立つかどうかを確認できますか? これにより、ボタン クリックなどのポストバック イベントをトリガーする何かが原因である場合、無限ループの問題が回避される可能性があります。

if (IsPostBack) return;
于 2013-08-09T19:10:03.470 に答える