登录验证和重定向

时间:2012-09-06 09:25:29

标签: asp.net sql-server c#-2.0

我正在尝试使用ASP.net 2.0 Web应用程序中的C#2005实现登录验证。 SQL Server数据库包含一个名为“UserList”的表,其中包含LoginId,Password和Role列。 Login webform应该验证LoginId和密码,并且根据分配给该用户/访问者的角色应该重定向到具有预定义菜单选项的特定webform。角色可能是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;
    }

1 个答案:

答案 0 :(得分:0)

首先,我想sql表中的每个角色都有id,所以你可以摆脱AuthenticateUser中的ifs并返回id。或者您也可以返回实际角色,并在Login1_Authenticate函数中对此数据执行某些操作。 现在你也可以删除Login1_Authenticate函数中的ifs,如果你将使用字符,其中键是角色,值是pageURL,所以你可以写这样的东西:

   int flag = AuthenticateUser();
    Login1.DestinationPageUrl = roles.ElementAt(flag).Value;