-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,然后传递该变量但没有成功。我了解为什么会发生这种情况,但找不到有关如何正确执行此操作的任何信息。我是否需要将用户名和密码放入一个对象并将其传递给我的类构造函数?我真的不想从我创建的每个 Login.aspx 页面连接到我的数据库,以避免通过 http 发送密码。

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 是一个输出参数,其中包含用户详细信息,如密码、用户名等。成功登录时。如果登录无效,数据表返回空。在 userData 字符串中,所有这些信息都将可用。然后您可以使用 User 从任何页面检索这些信息认证车票

于 2012-08-09T11:53:30.640 回答