以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  HTTP用户身份验证  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=108429)

--  作者:tesia255
--  发布时间:2017/10/23 1:01:00
--  HTTP用户身份验证
我用下面的代码,替换上面教学中的代码,页面总是加载中,哪里错误了呢?  教学代码:http://www.foxtable.com/mobilehelp/index.htm?page=0041.htm
我是想用现有的用户表,验证登录身份。是外部数据源


\'验证用户身份
If UserName = "张三" AndAlso Password = "888" Then
    Verified  = True
ElseIf Username = "李四" AndAlso Password="999" Then
    Verified  = True
End If

----------------------------------------------------------------------------------------------

Dim dr As DataRow
dr = DataTables("Staff").Find("email =\'" & UserName & "\'")  \'在职员表中找到邮箱为输入邮箱的

\'验证用户身份
If  Password = dr("password") Then
    Verified  = True
End If



[此贴子已经被作者于2017/10/23 1:02:36编辑过]

--  作者:有点甜
--  发布时间:2017/10/23 8:51:00
--  

代码改成

 

Dim dr As DataRow
dr = DataTables("Staff").Find("email =\'" & UserName & "\'")  \'在职员表中找到邮箱为输入邮箱的

\'验证用户身份
If dr isnot Nothing AndAlso Password = dr("password") Then
    Verified  = True
End If

--  作者:tesia255
--  发布时间:2017/10/23 10:15:00
--  

您好,登录页面显示出来了,但是为什么点击登录后一直还是在登录页面。输入的用户名是表格中的正确对应的。

教学代码中其他都没有改。

--  作者:有点甜
--  发布时间:2017/10/23 10:22:00
--  

1、直接复制粘贴帮助文档代码进去,是否有问题?

 

2、替换代码后,如果一直在登陆页,说明没有查找到表数据。核对你表数据和你输入的数据。


--  作者:tesia255
--  发布时间:2017/10/23 10:24:00
--  
教学源代码粘贴进去无问题,以下是我现在的代码,只有加粗部分是改了的,其他都是教学代码:


Dim sb As New StringBuilder
Dim Verified As Boolean
Dim UserName As String = e.Cookies("username") \'从cookie中获取用户名
Dim Password As String = e.Cookies("password") \'从cookie中获取用户密码
\'如果在登录页面输入了用户名和密码 后单击确定按钮
If e.Path = "logon.htm" AndAlso e.PostValues.ContainsKey("username") AndAlso e.PostValues.ContainsKey("password")  Then
    UserName = e.PostValues("username")
    Password = e.PostValues("password")
End If


\'----------------------------------------------------------------------------------------------

Dim dr As DataRow
dr = DataTables("Staff").Find("email =\'" & UserName & "\'")  \'在职员表中找到邮箱为输入邮箱的
\'验证用户身份

If dr IsNot Nothing AndAlso Password = dr("password") Then
    Verified  = True
End If


\'_____________________________________________________________________________

If Verified  AndAlso e.Path = "logon.htm"  Then \'如果用户访问的是登录页,且身份验证成功
    e.Appendcookie("username",UserName) \'将用户名和密码写入cookie
    e.Appendcookie("Password",Password)
    e.WriteString("<meta http-equiv=\'Refresh\' c>") \'直接跳转到首页
    Return \'必须的
ElseIf Verified = False AndAlso e.Path <> "logon.htm" Then \'如果用户身份验证失败,且访问的不是登录页面
    e.WriteString("<meta http-equiv=\'Refresh\' c>") \'那么直接跳转到登录页面
    Return \'必须的
End If

\'_______________________________________________________________________________________


Select Case e.path
    Case "logon.htm"
        sb.AppendLine("<form action=\'logon.htm\' enctype=\'multipart/form-data\' method=\'post\' id=\'form1\'  name=\'form1\'>")
        If e.PostValues.ContainsKey("username") AndAlso e.PostValues.ContainsKey("Password")  Then \'判断是否是验证失败后的重新登录
            sb.AppendLine("用户名或密码错误!</br></br>")
            sb.AppendLine("户名: <input name=\'username\' id=\'username\' value=\'" & UserName & "\'\'><br/><br/>")
            sb.AppendLine("密码: <input type=\'password\' name=\'password\' id=\'password\' value =\'" & Password & "\'><br/><br/>")
        Else
            sb.AppendLine("户名: <input name=\'username\' id=\'username\'><br/><br/>")
            sb.AppendLine("密码: <input type=\'password\' name=\'password\' id=\'password\'><br/><br/>")
        End If
        sb.AppendLine("<input type=\'submit\' name=\'sumbit\' id=\'sumbit\' value=\'登录\'>")
        sb.AppendLine("<input type=\'reset\' name=\'reset\' id=\'reset\' value=\'重置\'>")
        sb.AppendLine("</form>")
        e.WriteString(sb.ToString)
    Case "exit.htm"
        e.Appendcookie("username", "") \'清除cookie中原来的用户名和密码
        e.Appendcookie("Password", "")
        e.WriteString("<meta http-equiv=\'refresh\' c>") \'跳转到登录页
    Case "", "default.htm"
        sb.AppendLine("这是首页<br/><br/>")
        sb.AppendLine("<a href=\'order.htm\'>订购产品<a><br/>")
        sb.AppendLine("<a href=\'product.htm\'>产品列表<a><br/>")
        sb.AppendLine("<a href=\'exit.htm\'>退出登录<a><br/>")
        e.WriteString(sb.Tostring)
    Case "order.htm"
        e.WriteString("这是订购页")
    Case "product.htm"
        e.WriteString("这是产品页")
End Select

--  作者:有点甜
--  发布时间:2017/10/23 11:10:00
--  

1、数据表Staff没有找到对应的用户,或者你数据没有加载出来导致找不到;

 

2、如果找到了,那就是password不匹配。


--  作者:tesia255
--  发布时间:2017/10/23 11:20:00
--  
数据是都加载的,用户名和密码也是按照数据库中的填写的   图片点击可在新窗口打开查看

是因为外部数据源吗?

--  作者:有点甜
--  发布时间:2017/10/23 12:47:00
--  

加入msgbox,看弹出什么

 

 

Dim dr As DataRow
dr = DataTables("Staff").Find("email =\'" & UserName & "\'")  \'在职员表中找到邮箱为输入邮箱的
\'验证用户身份

 

msgbox(dr is nothing)

msgbox(username & " | " & password)

if dr IsNot Nothing Then

    msgbox(username & " | " & password & " | " & dr("password"))

end If

If dr IsNot Nothing AndAlso Password = dr("password") Then

    Verified  = True

End If

--  作者:tesia255
--  发布时间:2017/10/23 22:10:00
--  
返回TRUE

返回   |

等于用户名密码返回的空

--  作者:有点蓝
--  发布时间:2017/10/23 22:15:00
--  
返回TRUE说明Staff没有这个提交上来的用户名的数据,注意find查询条件表达式的值是大小写敏感的