TextMode =“Password”时如何验证密码

时间:2012-08-09 11:37:25

标签: c# visual-studio-2010 .net-4.0 asna-visual-rpg

我正在使用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发送密码。

1 个答案:

答案 0 :(得分: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参数,其中包含用户详细信息,如密码,用户名等。成功登录后,如果userData字符串中的login.with无效,则返回空。所有这些信息都可用。然后你可以从任何地方检索这些信息。使用用户身份验证票证的页面