2012-09-06 84 views
0

我想在ASP.net 2.0 web應用程序中使用C#2005實現登錄驗證。 SQL Server數據庫包含一個名爲「UserList」的表,其中包含LoginId,Password和Role列。 Login webform應驗證LoginId和密碼,並根據分配給該用戶/訪問者的角色重定向到具有預定義菜單選項的特定Web窗體。角色可能是Admin,DEO,Accounts或Member。我應該如何實現它?我曾嘗試以下:登錄驗證和重定向

protected void Login1_Authenticate(object sender, AuthenticateEventArgs e) 
    { 
     try 
     { 
      string uname = Login1.UserName.Trim(); 
      string password = Login1.Password.Trim(); 

      int flag = AuthenticateUser(uname, password); 

      if (flag == 1) 
      { 
       e.Authenticated = true; 
       Login1.DestinationPageUrl = "~/MenuAdmin.aspx"; 
      } 
      else if (flag == 2) 
      { 
       e.Authenticated = true; 
       Login1.DestinationPageUrl = "~/MenuDEO.aspx"; 
      } 
      else if (flag == 3) 
      { 
       e.Authenticated = true; 
       Login1.DestinationPageUrl = "~/MenuAccts.aspx"; 
      } 
      else if (flag == 4) 
      { 
       e.Authenticated = true; 
       Login1.DestinationPageUrl = "~/MenuMember.aspx"; 
      } 
      else 
      { 
       e.Authenticated = false; 
      } 
     } 

     catch (Exception) 
     { 
      e.Authenticated = false; 
     } 
    } 

private int AuthenticateUser(string uname, string password) 
    { 
     int bflag = 0; 
     string connString = ConfigurationManager.ConnectionStrings["LoginDemoConnString"].ConnectionString; 
     string strSQL = "Select * FROM UserList where ULoginId ='" + uname + "' AND UPassword ='" + password + "'"; 

     DataTable dt = new DataTable(); 
     SqlConnection m_conn; 
     SqlDataAdapter m_dataAdapter; 

     try 
     { 
      m_conn = new SqlConnection(connString); 
      m_conn.Open(); 
      m_dataAdapter = new SqlDataAdapter(strSQL, m_conn); 
      m_dataAdapter.Fill(dt); 
      m_conn.Close(); 
     } 

     catch (Exception ex) 
     { 
      dt = null; 
     } 

     finally 
     { 
      //m_conn.Close(); 
     } 

     if (dt.Rows.Count > 0) 
     { 
      if (dt.Rows[0][3].ToString() == "Administrator") 
       bflag = 1; 
      else if (dt.Rows[0][3].ToString() == "DEO") 
       bflag = 2; 
      else if (dt.Rows[0][3].ToString() == "Accts") 
       bflag = 3; 
      else 
       bflag = 4; 
     } 
     return bflag; 
    } 

回答

0

那麼首先我想在SQL表中的每個角色都有ID,這樣就可以擺脫的authenticateUser的IFS的,只是返回的ID。或者你也可以返回實際的角色,只需在Login1_Authenticate函數中使用這些數據。 現在還可以獲得在Login1_Authenticate功能擺脫了IFS的,如果你會使用字典,其中的關鍵是作用和價值是PAGEURL,所以你可以只寫類似的東西:

int flag = AuthenticateUser(); 
    Login1.DestinationPageUrl = roles.ElementAt(flag).Value; 
相關問題