我开发了一个登录页面,它可以通过存储过程运行。登录部分运行良好,但是,网站将包含角色,这些角色将确定用户登录安全部分后指向的页面。我在数据库/表中关注的列是: 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
..非常感谢任何帮助。
答案 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