0

フォーム認証を使用して、ログイン ページからログインした場合にのみページへのアクセスを許可しようとしています。ログインしてリダイレクトを試みると、ログイン ページにリダイレクトされます。

Web ログイン制御

protected void WebGenLogin_Authenticate(object sender, AuthenticateEventArgs e)
    {
        //Verify user against active directory
        if (new AD().validate(WebGenLogin.UserName, WebGenLogin.Password))
        {
            Session["UserAuthentication"] = WebGenLogin.UserName;
            Session.Timeout = 30;
            FormsAuthentication.RedirectFromLoginPage(WebGenLogin.UserName, WebGenLogin.RememberMeSet);
            Response.Redirect("~/WebGen/Gen/Create.aspx");
        }
        else
        {
            Session["UserAuthentication"] = "";
            Response.Redirect("http://thekickback.com/rickroll/rickroll.php");
        }
    }

Create.aspx Web.config

<authentication mode="Forms">
    <forms defaultUrl="~/WebGen/Gen/Create.aspx" loginUrl="../Login.aspx" slidingExpiration="true" timeout="30" />
  </authentication>
4

4 に答える 4

0

AD() が呼び出すオブジェクトの種類はわかりませんが、既定の ASP.NET メンバーシップ機能を使用していない可能性があります。思い出すと、メンバーシップ クラスの ValidateUser メソッドには、true が返された場合にユーザーが実際にログインするという副作用があります。

ユーザーを認証した後、ユーザーを表す新しい IPrincipal に HttpContext.User を設定し、リダイレクトする前に FormsAuthentication.SetAuthCookie() を呼び出す必要がある場合があります。

于 2013-10-10T17:32:46.747 に答える
0

コードは実際に機能しました。IIS の問題であることがわかりました。フォルダー構造全体を、他の部分ではなくアプリケーションに変換する必要がありました。

于 2013-10-17T08:08:22.713 に答える
0

これを試すことができますか:

if (new AD().validate(WebGenLogin.UserName, WebGenLogin.Password))
{
        Session["UserAuthentication"] = WebGenLogin.UserName;
        Session.Timeout = 30;
        FormsAuthentication.SetAuthCookie(WebGenLogin.UserName, false);
        FormsAuthentication.RedirectFromLoginPage(WebGenLogin.UserName, WebGenLogin.RememberMeSet);

        ***SNIP***
于 2013-10-10T17:30:26.110 に答える
0

わかりました。私のコードとは何の関係もありませんでした。ただし、セッションにユーザー名を保存することは削除しました。

私がしなければならないことは、IIS のルート サイトをアプリケーションに変更することでした。認証モードの行は、Login.aspx を使用してルートに配置されました。Create.aspx は別のフォルダーにありました。Web.config から認証モードを削除し、拒否セクションに入れるだけで、すべてが正しく機能しています。

于 2013-10-10T18:23:19.887 に答える