ASP.net将用户角色编码到登录页面

时间:2013-09-04 16:20:01

标签: asp.net vb.net stored-procedures login

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

我要做的是:获取登录页面以区分Role_ID为1的用户和Role_ID为2的用户。但是,当前,当我登录时在页面中,无论用户具有什么角色ID,我都会被引导到SecurePage.aspx。我可以请一点指点吗?

这是我的存储过程

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

..非常感谢任何帮助。

2 个答案:

答案 0 :(得分:0)

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

默认情况下,Login控件会在尝试成功后将您重定向到目标网页。我认为您应该参与OnLoggedIn事件并重定向页面,然后服务器才有机会为您完成。

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

答案 1 :(得分:0)

在您If rd.HasRows Then内部您重定向到SecurePage,所以我猜它甚至没有达到。尝试删除此内的Response.Redirect("securepgaes/SecurePage.aspx"),并在其中添加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