Foxtable(狐表)用户栏目专家坐堂 → 如何实现移动端多端登录


  共有3154人关注过本帖树形打印复制链接

主题:如何实现移动端多端登录

帅哥哟,离线,有人找我吗?
chen_sheng
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:698 积分:6166 威望:0 精华:0 注册:2018/5/10 9:05:00
如何实现移动端多端登录  发帖心情 Post By:2021/12/7 12:01:00 [显示全部帖子]

参考实例可以账号密码登录 及企业微信登录了

但是如何结合起来 可以实现企业微信、钉钉内打开免登,浏览器登录过来实现账号密码授权  如何结合
如何让登录更安全实现呢
http://www.foxtable.com/mobilehelp/topics/0154.htm


2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96

Static UserTable As DataTable '定义一个变量,用于存储用户随机身份ID,以及最后一次活动时间.
Static
 ClearTime As Date
If
 UserTable Is Nothing Then '创建用于记录登录信息的临时表
    ClearTime = Date.Now()
    
Dim dtb As New DataTableBuilder("UserInfos")
    dtb.AddDef("UserName"Gettype(String), 16)
    dtb.AddDef("UserID",Gettype(String),16)
    dtb.AddDef("ActiveTime",Gettype(Date))
    UserTable = dtb.Build(True)

End
 If
If
 (Date.Now - ClearTime).TotalMinutes >= 30 Then '清除超过30分钟没有操作的登录信息
    UserTable.DeleteFor("ActiveTime < #" & Date.Now.AddMinutes(-30) & "#")
    ClearTime = Date.Now()
End
 If
Dim wb As New weui
'
身份验证
Dim
 UserName As String
Dim
 Password As String
Dim
 UserID As String
If
 e.Path = "logon.htm" '验证用户名和密码
    If e.PostValues.ContainsKey("username"AndAlso e.PostValues.ContainsKey("password")  Then
        Dim Verified As Boolean 
'
用于标记用户是否通过了身份验证
        UserName = e.PostValues("username")
        Password = e.PostValues("password")
        If UserName = 
"
张三" AndAlso Password = "888" Then  '实际使用的时候,请改为从数据库读取用户名和密码进行比较
            Verified  = True
        ElseIf Username = 
"
李四" AndAlso Password="999" Then
            Verified  = True
        End If
        If Verified Then
            UserID = Rand.NextString(16
'
生成随机用户ID
            UserName = EncryptText(UserName,"123","123"
'
将用户名加密.
            Dim dr As DataRow = UserTable.Find("UserName = '" & UserName & "'")
            If  dr IsNot Nothing Then 
'
如果是重复登录,删除以前的登录信息
                dr.Delete()
            End If
            dr = UserTable.AddNew()
            dr("UserName") = UserName
            dr("UserID") = UserId
            dr("ActiveTime") = Date.Now 
'
记录登录时间
            wb.AppendCookie("username",UserName
'
将用户名和UserID写入cookie
            wb.AppendCookie("userid",UserID)
            wb.InsertHTML("<meta http-equiv='Refresh' c>"
'
直接跳转到首页
            e.WriteString(wb.Build) 
'
生成网页
            Return 
'
必须的
        End If
    End 
If

Else
 '其它页面从Cookie提取登录信息进行验证
    UserName = e.Cookies("username")  
'
cookie中获取用户名
    UserID = e.Cookies("userid")  
'
cookie中获取 随机ID
    Dim dr As DataRow = UserTable.Find("UserName = '" & UserName & "'")
    If dr IsNot Nothing AndAlso dr("UserID") = UserID Then  
'
如果通过验证,更新活动时候,继续访问其它页面.
        dr("ActiveTime") = Date.Now 
'
更新活动时间
    Else 
'
如果验证失败
        wb.InsertHTML("<meta http-equiv='Refresh' c>"
'
那么直接跳转到登录页面
        e.WriteString(wb.Build) 
'
生成网页
        Return 
'
必须的
    End 
If

End
 If
'
开始生成网页
Select
 Case e.path
    
Case "logon.htm" '登录页面
        wb.AddPageTitle("","pageheader","销售系统","由湛江辉迅基于Foxtable开发")
        If e.PostValues.ContainsKey("username"AndAlso e.PostValues.ContainsKey("password")  Then '判断是否是验证失败后的重新登录
            wb.AddTopTips("","toptip1","用户名或密码错误!").msec = 2000 '如果用户通过登录按钮访问,则给用户一个2秒的提示.
        
End If
        wb.AddForm("","form1","logon.htm")
        With wb.AddInputGroup("form1","ipg1")
            .AddInput("username",
"
户名","text")
            .AddInput("password",
"
密码","password")
        End With
        With wb.AddButtonGroup("form1","btg1",True)
            .Add("btn1"
"
登录""submit")
        End With
    Case "exit.htm" 
'
退出登录
        wb.DeleteCookie("username"
'
清除cookie中原来的用户名和UserID
        wb.DeleteCookie("UserID")
        wb.InsertHTML("<meta http-equiv='Refresh' c>"
'
然后直接跳转到登录页面
    Case "", "default.htm" 
'
首页
        wb.AddPageTitle("","pageheader","销售系统","由湛江辉迅基于Foxtable开发")
        With wb.AddGrid("","g1")
            .Add("c1",
"
增加订单""./images/button.png").Attribute = ""
            .Add("c2","
客户管理""./images/cell.png""http://www.foxtable.com")
            .Add("c3",
"
销售统计""./images/toast.png""http://www.foxtable.com")
            .Add("c4","Dialog""./images/dialog.png""http://www.foxtable.com")
            .Add("c5","Progress""./images/progress.png""http://www.foxtable.com")
            .Add("c6","Msg""./images/msg.png""http://www.foxtable.com")
            .Add("c7","Article""./images/article.png""http://www.foxtable.com")
            .Add("c8","ActionSheet""./images/actionSheet.png""http://www.foxtable.com")
            .Add("c9","Icons""./images/icons.png""http://www.foxtable.com")
            .Add("c10","Panel""./images/panel.png""http://www.foxtable.com")
            .Add("c11","Tab""./images/tab.png""http://www.foxtable.com")
            .Add("c12",
"
退出""./images/exit.png""exit.htm"'退出登录
        End 
With

End
 Select
e
.WriteString(wb.Build) '生成网页

[此贴子已经被作者于2021/12/7 12:02:42编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
chen_sheng
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:698 积分:6166 威望:0 精华:0 注册:2018/5/10 9:05:00
  发帖心情 Post By:2021/12/7 12:52:00 [显示全部帖子]

代码是否如下:
Static UserTable As DataTable '定义一个变量,用于存储用户随机身份ID,以及最后一次活动时间.
Static ClearTime As Date
If UserTable Is Nothing Then '创建用于记录登录信息的临时表
    ClearTime = Date.Now()
    Dim dtb As New DataTableBuilder("UserInfos")
    dtb.AddDef("UserName", Gettype(String), 16)
    dtb.AddDef("UserID",Gettype(String),16)
    dtb.AddDef("ActiveTime",Gettype(Date))
    UserTable = dtb.Build(True)
End If
If (Date.Now - ClearTime).TotalMinutes >= 30 Then '清除超过30分钟没有操作的登录信息
    UserTable.DeleteFor("ActiveTime < #" & Date.Now.AddMinutes(-30) & "#")
    ClearTime = Date.Now()
End If
Dim wb As New weui
'身份验证
Dim UserName As String
Dim Password As String
Dim UserID As String
If e.Path = "logon.htm" '验证用户名和密码
    If e.PostValues.ContainsKey("username") AndAlso e.PostValues.ContainsKey("password")  Then
        Dim Verified As Boolean '用于标记用户是否通过了身份验证
        UserName = e.PostValues("username")
        Password = e.PostValues("password")
        If UserName = "张三" AndAlso Password = "888" Then  '实际使用的时候,请改为从数据库读取用户名和密码进行比较
            Verified  = True
        ElseIf Username = "李四" AndAlso Password="999" Then
            Verified  = True
        End If
        If Verified Then
            UserID = Rand.NextString(16) '生成随机用户ID
            UserName = EncryptText(UserName,"123","123") '将用户名加密.
            Dim dr As DataRow = UserTable.Find("UserName = '" & UserName & "'")
            If  dr IsNot Nothing Then '如果是重复登录,删除以前的登录信息
                dr.Delete()
            End If
            dr = UserTable.AddNew()
            dr("UserName") = UserName
            dr("UserID") = UserId
            dr("ActiveTime") = Date.Now '记录登录时间
            wb.AppendCookie("username",UserName) '将用户名和UserID写入cookie
            wb.AppendCookie("userid",UserID)
            wb.InsertHTML("<meta http-equiv='Refresh' c>") '直接跳转到首页
            e.WriteString(wb.Build) '生成网页
            Return '必须的
        End If
    End If
Elseif         e.Path = "qywx.htm" 
Elseif         e.Path = "dding.htm" 

else'其它页面从Cookie提取登录信息进行验证
    UserName = e.Cookies("username")  '从cookie中获取用户名
    UserID = e.Cookies("userid")  '从cookie中获取 随机ID
    Dim dr As DataRow = UserTable.Find("UserName = '" & UserName & "'")
    If dr IsNot Nothing AndAlso dr("UserID") = UserID Then  '如果通过验证,更新活动时候,继续访问其它页面.
        dr("ActiveTime") = Date.Now '更新活动时间
    Else '如果验证失败
        wb.InsertHTML("<meta http-equiv='Refresh' c>") '那么直接跳转到登录页面
        e.WriteString(wb.Build) '生成网页
        Return '必须的
    End If
End If
'开始生成网页
Select Case e.path
    Case "logon.htm" '登录页面
        wb.AddPageTitle("","pageheader","销售系统","由湛江辉迅基于Foxtable开发")
        If e.PostValues.ContainsKey("username") AndAlso e.PostValues.ContainsKey("password")  Then '判断是否是验证失败后的重新登录
            wb.AddTopTips("","toptip1","用户名或密码错误!").msec = 2000 '如果用户通过登录按钮访问,则给用户一个2秒的提示.
        End If
        wb.AddForm("","form1","logon.htm")
        With wb.AddInputGroup("form1","ipg1")
            .AddInput("username","户名","text")
            .AddInput("password","密码","password")
        End With
        With wb.AddButtonGroup("form1","btg1",True)
            .Add("btn1", "登录", "submit")
        End With
    Case "exit.htm" '退出登录
        wb.DeleteCookie("username") '清除cookie中原来的用户名和UserID
        wb.DeleteCookie("UserID")
        wb.InsertHTML("<meta http-equiv='Refresh' c>") '然后直接跳转到登录页面
    Case "", "default.htm" '首页
        wb.AddPageTitle("","pageheader","销售系统","由湛江辉迅基于Foxtable开发")
        With wb.AddGrid("","g1")
            .Add("c1","增加订单", "./images/button.png").Attribute = ""
            .Add("c2","客户管理", "./images/cell.png", "http://www.foxtable.com")
            .Add("c3","销售统计", "./images/toast.png", "http://www.foxtable.com")
            .Add("c4","Dialog", "./images/dialog.png", "http://www.foxtable.com")
            .Add("c5","Progress", "./images/progress.png", "http://www.foxtable.com")
            .Add("c6","Msg", "./images/msg.png", "http://www.foxtable.com")
            .Add("c7","Article", "./images/article.png", "http://www.foxtable.com")
            .Add("c8","ActionSheet", "./images/actionSheet.png", "http://www.foxtable.com")
            .Add("c9","Icons", "./images/icons.png", "http://www.foxtable.com")
            .Add("c10","Panel", "./images/panel.png", "http://www.foxtable.com")
            .Add("c11","Tab", "./images/tab.png", "http://www.foxtable.com")
            .Add("c12","退出", "./images/exit.png", "exit.htm") '退出登录
        End With
End Select
e.WriteString(wb.Build) '生成网页

 回到顶部
帅哥哟,离线,有人找我吗?
chen_sheng
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:698 积分:6166 威望:0 精华:0 注册:2018/5/10 9:05:00
  发帖心情 Post By:2021/12/7 12:55:00 [显示全部帖子]

安全登录验证把其他页面登录都排除了,不这样做用安全登录模式会不会登录不了

 回到顶部
帅哥哟,离线,有人找我吗?
chen_sheng
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:698 积分:6166 威望:0 精华:0 注册:2018/5/10 9:05:00
  发帖心情 Post By:2021/12/7 15:56:00 [显示全部帖子]

老拦截到登录界面  黄色部分的代码是不是有问题呀
ElseIf e.Path = "qywx.htm" Then

    Dim Multi As String = Functions.Execute("企业微信验证函数",e,e.path)
    If Multi > "" Then
        Dim Values() As String
        Values = Multi.split("|")
        uid =   Values(0)
        uname =  Values(1)
        wb.AppendCookie("uname",Values(1))
' MessageBox.Show(uname)
cmd.CommandText = "s elect top 1 * from 用户 where username = '" & uname & "' and Password = '" & Password & "'"
        dt = cmd.ExecuteReader()
        If dt.DataRows.Count = 1 Then
            userid = Rand.NextString(16) '生成随机用户ID
            username = EncryptText(uname,"123","321") '将用户名加密
            
            sqltext = "D ELETE FROM 在线用户 where username = '" & username & "'"
            cmd.CommandText = sqltext
            Count= cmd.ExecuteNonQuery()
            
            sqltext = "I NSERT INTO 在线用户(username,ActiveTime,userid) VALUES ( '" & username & "','" &  ClearTime & "','" & userid & "')   U PDATE 用户  SET  UserID = '" & userid & "' ,ActiveTime = '" &  ClearTime & "' WHERE UserName = '" & DecryptText(username,"123","321") & "'   I NSERT INTO 登录日志(username,[ActiveTime],userid,usernamex,Path) VALUES ( '" & username & "','" &  ClearTime & "','" & userid & "', '" & DecryptText(username,"123","321") & "','" & e.Path  & "') "
            cmd.CommandText = sqltext
            Count= cmd.ExecuteNonQuery()
            
            wb.AppendCookie("username",username) '将用户名和userid写入cookie
            wb.AppendCookie("userid",userid)
            ' wb.InsertHTML("<meta http-equiv='Refresh' c>") '直接跳转到首页
            e.WriteString(wb.Build) '生成网页
            Return ""  '必须的
        End If
        'Else
        'wb.InsertHTML("<h3 align='center' style='margin-top:5px'>错误</h3>")
        'Return ""
    e.AsyncExecute = True  '通知系统,将采用异步方式生成网页
            Functions.AsyncExecute("qywx", e) '异步调用函数生成网页
            Return  "" 
    End If

 回到顶部
帅哥哟,离线,有人找我吗?
chen_sheng
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:698 积分:6166 威望:0 精华:0 注册:2018/5/10 9:05:00
  发帖心情 Post By:2021/12/7 16:58:00 [显示全部帖子]

这种场景越来越多 bs不可避免的要考虑安全性   建议官方完善一下实例   这个方式我调试不通

 回到顶部
帅哥哟,离线,有人找我吗?
chen_sheng
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:698 积分:6166 威望:0 精华:0 注册:2018/5/10 9:05:00
  发帖心情 Post By:2021/12/7 20:48:00 [显示全部帖子]



Dim Count As Integer
Dim dt As DataTable

Dim cmd As New SQLCommand
cmd.C
cmd.CommandTimeOut = 3000000
cmd.CommandText = "D ELETE FROM 在线用户 where datediff(minute,ActiveTime,GETDATE()) > 30  "
Count= cmd.ExecuteNonQuery()

Dim ClearTime As Date
ClearTime = Date.Now()
Dim wb As New weui

Dim username As String
Dim Password As String
Dim userid As String
Dim sqltext As String

    Dim uid As String
    Dim uname As String
    Dim ubm As String

If  e.Path = "logon.htm"      Then   '验证用户名和密码  
    If e.PostValues.ContainsKey("username") AndAlso e.PostValues.ContainsKey("password")  Then
        username = e.PostValues("username")
        Password = e.PostValues("password")
        cmd.CommandText = "s elect top 1 * from 用户 where username = '" & username & "' and Password = '" & Password & "'"
        dt = cmd.ExecuteReader()
        If dt.DataRows.Count = 1 Then
            userid = Rand.NextString(16) '生成随机用户ID
            username = EncryptText(username,"123","321") '将用户名加密
            
            sqltext = "D ELETE FROM 在线用户 where username = '" & username & "'"
            cmd.CommandText = sqltext
            Count= cmd.ExecuteNonQuery()
            
            sqltext = "I NSERT INTO 在线用户(username,ActiveTime,userid) VALUES ( '" & username & "','" &  ClearTime & "','" & userid & "')   U PDATE 用户  SET  UserID = '" & userid & "' ,ActiveTime = '" &  ClearTime & "' WHERE UserName = '" & DecryptText(username,"123","321") & "'   I NSERT INTO 登录日志(username,[ActiveTime],userid,usernamex,Path) VALUES ( '" & username & "','" &  ClearTime & "','" & userid & "', '" & DecryptText(username,"123","321") & "','" & e.Path  & "') "
            cmd.CommandText = sqltext
            Count= cmd.ExecuteNonQuery()
            
            wb.AppendCookie("username",username) '将用户名和userid写入cookie
            wb.AppendCookie("userid",userid)
            wb.InsertHTML("<meta http-equiv='Refresh' c>") '直接跳转到首页
            e.WriteString(wb.Build) '生成网页
            Return ""  '必须的
        End If
    End If
ElseIf e.Path = "qywx.htm" Then

    Dim Multi As String = Functions.Execute("企业微信验证函数",e,e.path)
    If Multi > "" Then
        Dim Values() As String
        Values = Multi.split("|")
        uid =   Values(0)
        uname =  Values(1)
        wb.AppendCookie("uname",Values(1))
MessageBox.Show(uname)
cmd.CommandText = "s elect top 1 * from 用户 where username = '" & uname & "' and Password = '" & Password & "'"
        dt = cmd.ExecuteReader()
        If dt.DataRows.Count = 1 Then
            userid = Rand.NextString(16) '生成随机用户ID
            username = EncryptText(uname,"123","321") '将用户名加密
            
            sqltext = "D ELETE FROM 在线用户 where username = '" & username & "'"
            cmd.CommandText = sqltext
            Count= cmd.ExecuteNonQuery()
            
            sqltext = "I NSERT INTO 在线用户(username,ActiveTime,userid) VALUES ( '" & username & "','" &  ClearTime & "','" & userid & "')   U PDATE 用户  SET  UserID = '" & userid & "' ,ActiveTime = '" &  ClearTime & "' WHERE UserName = '" & DecryptText(username,"123","321") & "'   I NSERT INTO 登录日志(username,[ActiveTime],userid,usernamex,Path) VALUES ( '" & username & "','" &  ClearTime & "','" & userid & "', '" & DecryptText(username,"123","321") & "','" & e.Path  & "') "
            cmd.CommandText = sqltext
            Count= cmd.ExecuteNonQuery()
            
wb.AppendCookie("uname",Values(1))
            wb.AppendCookie("username",username) '将用户名和userid写入cookie
            wb.AppendCookie("userid",userid)
            wb.InsertHTML("<meta http-equiv='Refresh' c>") '直接跳转到首页
            e.WriteString(wb.Build) '生成网页
            Return ""  '必须的
        End If
        ' Else
        ' wb.InsertHTML("<h3 align='center' style='margin-top:5px'>错误</h3>")
             ' Return ""
    e.AsyncExecute = True  '通知系统,将采用异步方式生成网页
            Functions.AsyncExecute("qywx", e) '异步调用函数生成网页
            Return  "" 
    End If



Else '其它页面从Cookie提取登录信息进行验证
    username = e.Cookies("username")  '从cookie中获取用户名
    userid = e.Cookies("userid")  '从cookie中获取 随机ID
    
    sqltext = "s elect Count(*) from 在线用户 where username = '" & username & "' and userid = '" & userid & "'"
    'MessageBox.Show("其他页面查询用户信息的 sqltext " & sqltext )
    cmd.CommandText = sqltext
     Count = cmd.ExecuteScalar 
   If  Count > 0 
    sqltext = "U PDATE [在线用户]   SET [ActiveTime] = GETDATE() WHERE username = '" & username & "' And userid =  '" & userid & "'   I NSERT INTO 登录日志(username,[ActiveTime],userid,usernamex,Path) VALUES ( '" & username & "','" &  ClearTime & "','" & userid & "', '" & DecryptText(username,"123","321") & "','" & e.Path  & "') "
    'MessageBox.Show("其他页面查询到用户信息执行的 sqltext " & sqltext )
    cmd.CommandText = sqltext
    Count= cmd.ExecuteScalar 
    Else
        wb.InsertHTML("<meta http-equiv='Refresh' c>") '那么直接跳转到登录页面
        e.WriteString(wb.Build) '生成网页
        Return  "" '必须的
    End If
End If

Dim fl As String =ProjectPath & "web\" & e.path
If filesys.FileExists(fl)
    Dim idx As Integer = fl.LastIndexOf(".")
    Dim ext As String  = fl.SubString(idx)
    Select Case ext
        Case ".jpg",".gif",".png",".bmp",".wmf",".js",".css" ,".html",".htm",".txt"
            e.WriteFile(fl)
    End Select
End If

 回到顶部
帅哥哟,离线,有人找我吗?
chen_sheng
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:698 积分:6166 威望:0 精华:0 注册:2018/5/10 9:05:00
  发帖心情 Post By:2021/12/7 20:49:00 [显示全部帖子]

'开始生成网页
Select Case e.path
    Case "logon.htm" '登录页面
        wb.AddPageTitle("","pageheader","****系统","技术支持:****")
        If e.PostValues.ContainsKey("username") AndAlso e.PostValues.ContainsKey("password")  Then '判断是否是验证失败后的重新登录
            wb.AddTopTips("","toptip1","用户名或密码错误!").msec = 3000 '如果用户通过登录按钮访问,则给用户一个2秒的提示.
        End If
        wb.AddForm("","form1","logon.htm")
        With wb.AddInputGroup("form1","ipg1")
            .AddInput("username","账号","text")
            .AddInput("password","密码","password")
        End With
        With wb.AddButtonGroup("form1","btg1",True)
            .Add("btn1", "登录", "submit")
        End With
        
    Case "exit.htm" '退出登录
        wb.DeleteCookie("username") '清除cookie中原来的用户名和userid
        wb.DeleteCookie("userid")
        wb.InsertHTML("<meta http-equiv='Refresh' c>") '然后直接跳转到登录页面
        
    Case Else
        Dim dr As DataRow = DataTables("HttpRequest").sqlFind("path='" & e.Path & "'")
        If dr IsNot Nothing Then
             e.AsyncExecute = True  '通知系统,将采用异步方式生成网页
            Functions.AsyncExecute(dr("函数"), e) '异步调用函数生成网页
            Return  ""  
        Else
            ' wb.InsertHTML("<meta http-equiv='Refresh' c>") '那么直接跳转到登录页面
    With wb.AddPanelGroup("","pg1","提醒信息")
                 With.Add("pn1","当前模块您没有授权,请联系系统管理员进行授权 !",e.Path,"./images/提醒.png") '超链接
                     .AddFoot("时间:" & Date.Now())
                 End With
            End With
        End If

End Select
e.WriteString(wb.Build) '生成网页


' 企业微信验证函数


Dim e As RequestEventArgs = args(0)
'MessageBox.Show(args(0))
Dim url As String = args(1)
Dim UserId As String
Dim uname As String
Dim sb As New StringBuilder
If e.GetValues.ContainsKey("code") Then '如果通过授权链接跳转而来,就根据传递过来的code参数调用接口,获取用户的UserId
    Dim ul As String  = "https://qyapi.weixin.qq.com/cgi-bin/user/getuserinfo?access_token={0}&code={1}"
    ul = CExp(ul,Functions.Execute("QYWXGetQYAccessToken"),e.GetValues("code"))
    Dim hc As new HttpClient(ul)
    Dim jo As JObject = JObject.Parse(hc.GetData)
    If jo("UserId") IsNot Nothing Then
        UserId = jo("UserId")
    End If
Else
    UserId = e.Cookies("uid")
    
End If
If UserId  > "" then'授权成功
    e.AppendCookie("uid",UserId) '将userid和username存储在Cookie中
    
    Dim ul As String  = "https://qyapi.weixin.qq.com/cgi-bin/user/get?access_token={0}&userid={1}"
    ul= CExp(ul,Functions.Execute("QYWXGetQYAccessToken"),UserId)
    Dim hc As new HttpClient(ul)
    Dim jo As JObject = JObject.Parse(hc.GetData)
    
    
    '' MessageBox.Show(jo.ToString)
    uname = cstr(jo("name"))
    e.AppendCookie("uname",uname) '将userid和username存储在Cookie中
    Dim cs As String
    cs = UserId & "|" & uname
    
    'msgbox(UserId)
    'msgbox(uname)
    
    Return cs
ElseIf e.GetValues.ContainsKey("code") = False Then '如果授权失败,且不是通过授权链接跳转而来,那么就跳转到授权链接
    Dim ul1 As String = "https://open.weixin.qq.com/connect/oauth2/authorize?appid={0}&redirect_uri={1}&response_type=code&scope=SCOPE&agentid=AGENTID&state=STATE#wechat_redirect"
    
    Dim ul2 As String
    ul2= UrlEncode("http://www.123.com" & url)
    ' MessageBox.Show("http://" & _ym &  "/" & url)
    ul1 = CExp(ul1,"888888",ul2)
    sb.Append("<meta http-equiv='Refresh' c>") '跳转到授权链接
    e.WriteString(sb.ToString)
    Return ""
End If


' QYWXGetQYAccessToken

Static CreateTime As Date '记录最近一次生成access_token的时间
Static AccessTocken As String '记录最近一次生成的access_token
Dim CorpID As String=  "88888888" '企业号的CorpID
Dim Secret As String = "**************" '管理组的Secret
Dim tp As TimeSpan = Date.Now - CreateTime
If tp.TotalSeconds > 3600 Then
    Dim url As String = "https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid={0}&corpsecret={1}"
    Dim hc As New HttpClient(CExp(url, CorpID, Secret))
    Dim ret As String = hc.GetData()
    If ret = "" Then '如果失败,再尝试一次
        hc.GetData()
    End If
    CreateTime = Date.Now()
    Dim jo As JObject = JObject.Parse(ret)
    If jo("access_token") IsNot Nothing Then
        AccessTocken = jo("access_token")
    Else
        MessageBox.show("获取access_token失败,原因:" & vbcrlf & jo.ToString)
    End If
End If
Return AccessTocken
[此贴子已经被作者于2021/12/7 20:49:43编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
chen_sheng
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:698 积分:6166 威望:0 精华:0 注册:2018/5/10 9:05:00
  发帖心情 Post By:2021/12/7 21:55:00 [显示全部帖子]

通过微信认证不了,用户登录不了,很奇怪的是手机可以登录  别人的手机登录不了  点链接 要不然就跳转到登录界面

cmd.CommandText = "s 
elect top 1 * from 用户 where username = '" & uname & "'" 微信授权不需要密码 
调试时间上面这段已经排除

下面这个函数是干嘛用的?       -------这个是异步生成微信端的首页网页
        e.AsyncExecute = True  '通知系统,将采用异步方式生成网页
        Functions.AsyncExecute("qywx", e) '异步调用函数生成网页
        Return  ""
这下面这个个条件没有考虑到  
else ‘Multi = ""应该直接返回
return “” 

我怀疑是下面微信函数红底部分逻辑有问题   这代码是抄的  感觉函数内写Cookie  好像逻辑不对 帮忙指导一下  感谢!
' 企业微信验证函数
Dim e As RequestEventArgs = args(0)
Dim url As String = args(1)
Dim UserId As String
Dim uname As String
Dim sb As New StringBuilder
If e.GetValues.ContainsKey("code") Then '如果通过授权链接跳转而来,就根据传递过来的code参数调用接口,获取用户的UserId
    Dim ul As String  = "https://qyapi.weixin.qq.com/cgi-bin/user/getuserinfo?access_token={0}&code={1}"
    ul = CExp(ul,Functions.Execute("QYWXGetQYAccessToken"),e.GetValues("code"))
    Dim hc As new HttpClient(ul)
    Dim jo As JObject = JObject.Parse(hc.GetData)
    If jo("UserId") IsNot Nothing Then
        UserId = jo("UserId")
    End If
Else
    UserId = e.Cookies("uid")
End If
If UserId  > "" then'授权成功
    e.AppendCookie("uid",UserId) '将userid和username存储在Cookie中
    Dim ul As String  = "https://qyapi.weixin.qq.com/cgi-bin/user/get?access_token={0}&userid={1}"
    ul= CExp(ul,Functions.Execute("QYWXGetQYAccessToken"),UserId)
    Dim hc As new HttpClient(ul)
    Dim jo As JObject = JObject.Parse(hc.GetData)
    uname = cstr(jo("name"))
    e.AppendCookie("uname",uname) '将userid和username存储在Cookie中
    Dim cs As String
    cs = UserId & "|" & uname  
    Return cs
ElseIf e.GetValues.ContainsKey("code") = False Then '如果授权失败,且不是通过授权链接跳转而来,那么就跳转到授权链接
    Dim ul1 As String = "https://open.weixin.qq.com/connect/oauth2/authorize?appid={0}&redirect_uri={1}&response_type=code&scope=SCOPE&agentid=AGENTID&state=STATE#wechat_redirect"
    
    Dim ul2 As String
    ul2= UrlEncode("http://www.123.com" & url)
    ul1 = CExp(ul1,"888888",ul2)
    sb.Append("<meta http-equiv='Refresh' c>") '跳转到授权链接
    e.WriteString(sb.ToString)
    Return ""
End If

[此贴子已经被作者于2021/12/7 22:01:30编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
chen_sheng
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:698 积分:6166 威望:0 精华:0 注册:2018/5/10 9:05:00
  发帖心情 Post By:2021/12/7 22:35:00 [显示全部帖子]

qywx  函数如下

Dim e As RequestEventArgs = args(0) '首页
Dim wb As New weui
    Dim uid As String
    Dim uname As String = e.Cookies("uname ")
    Dim ubm As String
    


'设定加载权限存入COOKE
Dim jz As String
Dim dr11 As DataRow
dr11 =  DataTables("用户管理").S QLfind("用户名 = '" & uname & "'")
If dr11 Is Nothing Then
    Return ""
Else
    Dim jzzhc As String = dr11("数据权限")
    If jzzhc = "" Then
        Return ""
    Else
        'Dim jzsx As String = jzzhc.Replace(",","|")  '加载筛选的人员字段
         'wb.AppendCookie("jzsx",jzsx)
'
        Dim Values() As String
        Values = jzzhc.split(",")
        For Index As Integer = 0 To Values.Length - 1
            jz= jz & "'" & (Values(Index)) & "',"
        Next
        jz =jz & "'" & uname & "'"
    End If
End If
 wb.AppendCookie("jz",jz) '设定加载权限到COOKIE

'提取选择列表字段
Dim dtz As DataTable
Dim cmd As New SQLCommand
cmd.C
cmd.CommandText = "S ELECT  字段,内容 From {ZL_动态字段}"
dtz = cmd.ExecuteReader

Dim dr1 As DataRow = dtz.Find("字段 = '家装类别'")
wb.AppendCookie("jzlbs","全部|" & dr1("内容"))
wb.AppendCookie("jzlb",dr1("内容"))

Dim dr2 As DataRow = dtz.Find("字段 = '渠道类别'")
wb.AppendCookie("qdlbs","全部|" & dr2("内容"))
wb.AppendCookie("qdlb",dr2("内容"))

Dim dr3 As DataRow = dtz.Find("字段 = '跟进状态'")
wb.AppendCookie("gjzts","全部|" & dr3("内容"))
wb.AppendCookie("gjzt",dr3("内容"))

Dim dr4 As DataRow = dtz.Find("字段 = '客户风格'")
wb.AppendCookie("khfgs","全部|" & dr4("内容"))
wb.AppendCookie("khfg",dr4("内容"))

Dim dr5 As DataRow = dtz.Find("字段 = '客户预算'")
wb.AppendCookie("khyss","全部|" & dr5("内容"))
wb.AppendCookie("khys",dr5("内容"))

'公司所有员工提取
Dim gzry As String = DataTables("用户管理").S QLGetComboListString("用户名")
wb.AppendCookie("gzrys","全部|" & gzry)
wb.AppendCookie("gzry",gzry)

'End If

'表头
wb.AddPageTitle("","pageheader", "<lable style='font-size:28px'>XXX·XXX</lable>",uname  & " XXXXX欢迎您!" )

With wb.AddGrid("","g1")
    .Add("c4","111", "./images/1.png", "khlr.htm")
    .Add("c10","222", "./images/2.png", "wdkh.htm")
   ' .Add("c7","333", "./images/3.png").Attribute = ""
    .Add("c7","<lable style='font-size:11px;color:red'>444</lable>", "./images/4.png","pmcx.htm")'"

End With

e.WriteString(wb.Build)
[此贴子已经被作者于2021/12/7 22:56:07编辑过]

 回到顶部