-2

VS2010のデフォルトのマスターテンプレートを使用してWebアプリケーションを構築しています。これを行うのは非常に新しいことです。Login.aspxページも使用していますが、組み込みのユーザー検証を使用する代わりに、ユーザー情報はデータベーステーブルにあります。だから私が見つけた指示に従って、私はこれに似た何かをしている:

    protected void Login1_Authenticate(object sender, AuthenticateEventArgs e) 
{ 
    Boolean bauthenticated = false; 
    bauthenticated = isValidUser(Login1.UserName, Login1.Password); 
    if (bauthenticated) 
    { 
        e.Authenticated = true; 
    } 
    else 
    { 
        e.Authenticated = false; 
    } 
} 

問題は、メソッドisValidUserを.dllに入れて他の場所で使用できるようにし、デフォルトの動作ではパスワードを空白にするため、パスワードを受け取らないことです。文字列変数をLogin1.Passwordに設定しようとしても、変数を渡そうとしても成功しませんでした。なぜこれが起こっているのかは理解していますが、これを正しく行う方法についての情報が見つかりません。ユーザー名とパスワードをオブジェクトに入れて、それをクラスコンストラクターに渡す必要がありますか?http経由でパスワードを送信しないようにするために、作成するすべてのLogin.aspxページからデータベースに接続したくありません。

4

1 に答える 1

0

次のコードを使用してみてください。

protected void LoginButton_Click(object sender, EventArgs e)
    {
        try
        {
            dtUserDetails = new DataTable();
            if (UserRepositoryBL.ValidateUser(LoginUser.UserName.Trim(), LoginUser.Password.Trim(), out dtUserDetails))
            {

                AuthUser au = new AuthUser();
                if (dtUserDetails.Rows.Count > 0)
                {
                    DataRow DR = dtUserDetails.Rows[0];
                    au.UserID = Convert.ToInt32(DR["UserID"].ToString());
                    au.UserNo = DR["UserNo"].ToString();
                    au.UserName = DR["UserName"].ToString();
                    au.Password = DR["Password"].ToString();
                }
                string userData = au.ToString();
                FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(

             1,                             // Version number

             LoginUser.UserName.Trim(),      // Username

             DateTime.Now,                  // Issue date

             DateTime.Now.AddMinutes(60), // Expiration date

             false,                         // Persistent?

             userData                 // User data

         );



                string eticket = FormsAuthentication.Encrypt(ticket);

                HttpCookie cookie = new HttpCookie

                     (FormsAuthentication.FormsCookieName, eticket);

                Response.Cookies.Add(cookie);


                BasePage.ActivityLog("User Login", LoginUser.UserName.Trim(), true, Request.RawUrl);
                string url = FormsAuthentication.GetRedirectUrl(LoginUser.UserName, false);

                Response.Redirect(url);

                //  FormsAuthentication.RedirectFromLoginPage(LoginUser.UserName, false);

            }
            else
            {
                LoginUser.FailureText = "Your login attempt was not successful. Please try again.";
            }

        }
        catch (Exception ex)
        {
            throw ex;
        }
    }

dtUserDetailsは、ログインが成功するとパスワードやユーザー名などのユーザーの詳細を含むoutパラメーターです。無効なログインの場合、datatableは空を返します。userData文字列でこれらの情報がすべて利用可能になります。その後、ユーザーを使用して任意のページから情報を取得できます。認証済みチケット

于 2012-08-09T11:53:30.640 に答える