0

我开发了一个登录页面,它的功能是存储过程。登录部分运行良好,但是,该网站将包含角色,这些角色将确定用户登录到安全部分后被定向到的页面。我在数据库/表中关注的列是: Guid -0 列 Login_name -9th column Login_Pwd -10th column Role_ID -11th column / 包含值 1 或 2

我要做的是:获取登录页面以区分 Role_ID 为 1 的用户和 Role_ID 为 2 的用户。但是,目前,当我登录该页面时,我被定向到 SecurePage .aspx 无论用户拥有什么角色 ID。我可以请教一下这方面的方向吗?

这是我的存储过程

ALTER PROCEDURE [dbo].[Check_Users]

       @Login_name as varchar(100),
       @Login_Pwd as varchar(50)
AS
       /* SET NOCOUNT ON */

       SELECT * FROM SupplierCompany WHERE Login_name=@Login_name AND Login_Pwd=@Login_Pwd 
RETURN

这是我的登录按钮背后的代码:

Try
            Dim con As New SqlConnection(GetConnectionString())
            con.Open()

            Dim cmd As New SqlCommand("Check_Users", con)
            cmd.CommandType = CommandType.StoredProcedure

            Dim p1 As New SqlParameter("Login_name", username.Text)
            Dim p2 As New SqlParameter("Login_Pwd", password.Text)

            cmd.Parameters.Add(p1)
            cmd.Parameters.Add(p2)
            Dim rd As SqlDataReader = cmd.ExecuteReader()

            If rd.HasRows Then
                rd.Read()
                lblinfo.Text = "You are Authorized."
                FormsAuthentication.RedirectFromLoginPage(username.Text, True)
                Response.Redirect("securepages/SecurePage.aspx")
            Else
                lblinfo.Text = "Invalid username or password."
            End If

            'check the Role of the usre logging in
            While (rd.Read())
                Session("numrecord") = rd.GetValue(0).ToString()
                rd.GetValue(11).ToString()

                If rd.GetValue(11).ToString() = 1 Then
                    Response.Redirect("securepages/SecurePage.aspx")

                ElseIf rd.GetValue(11).ToString() = 2 Then
                    Response.Redirect("securepages/newShipment.aspx")

                End If
            End While

        Catch

        Finally
        End Try

..非常感谢任何帮助。

4

2 回答 2

0

您在哪里定义了重定向登录用户的代码?

默认情况下,一旦成功,该Login控件将尝试将您重定向到目标页面。我认为你应该在服务器有机会为你做之前OnLoggedIn加入事件并重定向页面。

作为替代方案,如果这不起作用,您可以尝试构建自己的“登录控件” - 因为无论如何您都在使用存储过程来验证用户,所以在页面上转储一些文本框并走这条路并不是一个巨大的飞跃。至少那时你不需要担心覆盖默认行为。我相信 ASP.NET 提供了一堆你可以使用的 SP,它们将验证用户密码等 - 在服务器上检查它(它们都像dbo.aspnet_*.

于 2013-09-04T16:24:45.430 回答
0

在你的内部If rd.HasRows Then,你重定向到 SecurePage,所以我猜它甚至没有达到。尝试删除Response.Redirect("securepgaes/SecurePage.aspx")this if 的内部,并在其中添加 while 循环,如下所示:

If rd.HasRows Then
   rd.Read()
   lblinfo.Text = "You are Authorized."
   FormsAuthentication.RedirectFromLoginPage(username.Text, True)
   'Response.Redirect("securepages/SecurePage.aspx") Remove this line

   'check the Role of the user logging in
   While (rd.Read())
      Session("numrecord") = rd.GetValue(0).ToString()
      rd.GetValue(11).ToString()

      If rd.GetValue(11).ToString() = 1 Then
         Response.Redirect("securepages/SecurePage.aspx")
      ElseIf rd.GetValue(11).ToString() = 2 Then
         Response.Redirect("securepages/newShipment.aspx")
      End If

   End While

Else
   lblinfo.Text = "Invalid username or password."
End If
于 2013-09-04T16:31:18.320 回答