2012-08-09 23 views
-2

我正在VS2010中使用默認主模板構建Web應用程序 - 這是非常新的。我也使用Login.aspx頁面,但不是使用內置的用戶驗證,我的用戶信息位於數據庫表中。所以,隨着我才發現,我做的韋裏類似於這樣的說明:如何在TextMode =「密碼」時驗證密碼

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發送密碼。

+0

檢查你的方法isValidUser – 2012-08-09 11:40:04

+0

什麼類型的對象是'Login1'? – 2012-08-09 11:40:06

+1

糾正我,如果我在這裏是錯誤的,但不是簡單的答案**不會空白密碼**?你可以發佈'isValidUser'的代碼嗎?僅供參考 - 您的代碼可以縮短爲1行:'e.Authenticated = isValidUser(Login1.UserName,Login1.Password)'。 – James 2012-08-09 11:40:35

回答

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是包含用戶詳細資料,如密碼,用戶名等一個輸出參數..成功的login.datatable返回空,如果在用戶數據字符串無效login.with所有這些信息將被available.then你可以從任何頁面使用用戶驗證票檢索那些

+0

謝謝,但我如何獲得成功登錄如果我在我自己的數據庫中驗證用戶名和密碼?我沒有使用會員模式 - 請參閱我上面的最後一條評論。 – Brian 2012-08-09 12:06:26

+0

這段代碼也沒有使用membership.UserRepositoryBL.ValidateUser(LoginUser.UserName.Trim(),LoginUser.Password.Trim(),out dtUserDetails)方法調用你自己的數據庫 – chamara 2012-08-09 12:59:39

+0

對不起我的困惑,但是你建議我將用戶名和密碼保存在DataTable中並將其傳遞給我的.dll? – Brian 2012-08-09 13:25:08