0

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

1 回答 1

0

首先我猜想sql表中的每个角色都有id,所以你可以去掉AuthenticateUser中的ifs,只返回id。或者,您也可以返回实际角色,然后在 Login1_Authenticate 函数中对这些数据执行一些操作。现在你也可以去掉 Login1_Authenticate 函数中的 ifs,如果你将使用键是角色和值是 pageURL 的字典,所以你可以写这样的东西:

   int flag = AuthenticateUser();
    Login1.DestinationPageUrl = roles.ElementAt(flag).Value;
于 2012-09-06T09:49:13.103 回答