Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ASP.net将用户角色编码到登录页_Asp.net_Vb.net_Stored Procedures_Login - Fatal编程技术网

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

ASP.net将用户角色编码到登录页,asp.net,vb.net,stored-procedures,login,Asp.net,Vb.net,Stored Procedures,Login,我开发了一个登录页面,它的功能来自存储过程。登录部分功能良好,但是,网站将由角色组成,这些角色将决定用户登录到安全部分后指向的页面。我关注的数据库/表中的列有: Guid-0列 登录名-第9列 登录密码-第10栏 角色ID-第11列/包含值1或2 我想做的是:获取登录页面,以区分角色ID为1的用户和角色ID为2的用户。但是,当前,当我登录到页面时,无论用户的角色ID是什么,我都会被定向到SecurePage.aspx。能告诉我这方面的方向吗 这是我的存储过程: ALTER PROCEDURE [

我开发了一个登录页面,它的功能来自存储过程。登录部分功能良好,但是,网站将由角色组成,这些角色将决定用户登录到安全部分后指向的页面。我关注的数据库/表中的列有: Guid-0列 登录名-第9列 登录密码-第10栏 角色ID-第11列/包含值1或2

我想做的是:获取登录页面,以区分角色ID为1的用户和角色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

…非常感谢您的帮助。

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

默认情况下,
登录
控件将尝试在成功后将您重定向到目标页面。我认为您应该在服务器有机会为您执行之前,挂接到
OnLoggedIn
事件并重定向页面


作为一种替代方案,如果这不起作用,您可以尝试构建自己的“登录控件”——因为您使用的是存储过程来验证用户,因此在页面上转储一些文本框并按此方式进行操作并不是一个巨大的飞跃。至少这样,您不需要担心覆盖默认行为。我相信ASP.NET提供了一系列SP,您可以使用它们来验证用户密码,比如在服务器上查看(它们都像
dbo.aspnet.*
在您的
中,如果rd.HasRows,那么
您将重定向到SecurePage,所以我猜它甚至不会到达while。尝试删除
Response.redirect(“securepgaes/SecurePage.aspx”)
在这个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

谢谢,我能弄明白,但是我的治疗方法和你的建议很相似。谢谢,我现在很好奇:你的解决方案是什么?