Foxtable(狐表)用户栏目专家坐堂 → 求助:微信开发,文本框字数控制和openid获取


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

主题:求助:微信开发,文本框字数控制和openid获取

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


加好友 发短信
等级:超级版主 帖子:13837 积分:69650 威望:0 精华:0 注册:2016/11/1 14:42:00
  发帖心情 Post By:2017/5/19 17:01:00 [只看该作者]

你要访问的是这段代码生成的地址

 

APPID 开发者ID。
REDIRECT_URI 目标网页地址,注意:

1、需要用UrlEncode函数进行处理后再合成进去。
2、一定要完整的路径。

你可参考下面的代码生成授权URL:

Dim ul1 As String = "https://open.weixin.qq.com/connect/oauth2/authorize?appid={0}&redirect_uri={1}&response_type=code&scope=snsapi_base&state={2}#wechat_redirect"
Dim
 ul2 As String = UrlEncode("http://wexin.foxtable.com")
ul1
 = CExp(ul1,"wx8acdb7df5beb68fd",ul2,"123")
Output
.Show(ul1)
STATE 自定义参数,重定向后会在目标网页地址中用get方式附上此参数。

[此贴子已经被作者于2017/5/19 17:01:19编辑过]

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


加好友 发短信
等级:二尾狐 帖子:522 积分:5033 威望:0 精华:0 注册:2015/4/15 15:25:00
  发帖心情 Post By:2017/5/21 11:48:00 [只看该作者]

老师,身份通过验证的用户(即:Verified  = True),允许登陆系统首页:http://www.***.com/default.htm

如果首次登陆/或未验证的,显示登陆页:http://www.***.com/logon.htm


但如果知道系统首页,不通过验证,好像可以通过输入网址直接访问系统:http://www.***.com/default.htm

这要如何处理?

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


加好友 发短信
等级:二尾狐 帖子:522 积分:5033 威望:0 精华:0 注册:2015/4/15 15:25:00
  发帖心情 Post By:2017/5/21 16:00:00 [只看该作者]

老师,调试了半天代码,大概知道上面的问题是不会发生的:因为如果没有经过验证,程序已经return了,回到登陆页。不可能跳过登陆页,直接打开系统首页。是否可以这样理解?


HttpRequest事件代码:

'通用事件头
Dim
 fl As String = "d:\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",".zip",".rar"
            e.WriteFile(fl)
            Return '
这里必须返回
    End Select

End
 If
Dim
 wb As New weui
'
身份验证
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" '如果是通过登录页面访问,PostValues即可中提取用户名和密码
    If e.PostValues.ContainsKey("username"AndAlso e.PostValues.ContainsKey("password")  Then
        UserName = e.PostValues("username")
        Password = e.PostValues("password")
    End If

End
 If
If
 UserName = "张三" AndAlso Password = "888" Then  '实际使用的时候,请改为从数据库读取用户名和密码进行比较
    Verified  = True

ElseIf
 Username = "李四" AndAlso Password="999" Then
    Verified  = True

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

………


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


加好友 发短信
等级:二尾狐 帖子:522 积分:5033 威望:0 精华:0 注册:2015/4/15 15:25:00
  发帖心情 Post By:2017/5/21 22:14:00 [只看该作者]

老师,您好。

微信移动开发指南 --> WeUI框架 --> 让登陆变得更安全 --> 第88行代码:wb.DeleteCookie("password")

因为经过加密,Cookie中不出现密码,出现的是随机生成UserID,个人感觉应该为:wb.DeleteCookie("userid")

现在的代码,运行正常的,userid会存在Cookies表中不清除。








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


加好友 发短信
等级:超级版主 帖子:13837 积分:69650 威望:0 精华:0 注册:2016/11/1 14:42:00
  发帖心情 Post By:2017/5/22 8:22:00 [只看该作者]

 回复14楼,是的。帮助文档写得有问题。

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


加好友 发短信
等级:二尾狐 帖子:522 积分:5033 威望:0 精华:0 注册:2015/4/15 15:25:00
  发帖心情 Post By:2017/5/22 16:20:00 [只看该作者]

老师,我想把《让登陆变得更安全》中的临时表,改为数据表,目的:查看系统当前哪些人在线。
红我字体是我改动的。
目前测试超出30分钟的登录资料不会删除
另外,我不知道这样改会不会影响速度,或者存在隐患。

还有,就是网页中加密后的username和数据表中的usermane不一样(数据表中用=替换了%***),到时我会解密username,允许用户修改密码的。


Static ClearTime As Date
If (Date.Now - ClearTime).TotalMinutes >= 30 Then    '清除超过30分钟没有操作的登录信息
    DataTables("UsersNow").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 & "'")
                Dim dr As DataRow = DataTables("UsersNow").Find("UserName = '" & UserName & "'")
            If  dr IsNot Nothing Then '如果是重复登录,删除以前的登录信息
                dr.Delete()
                 dr.Save()
            End If
            'dr = UserTable.AddNew()
                dr = DataTables("UsersNow").AddNew()
            dr("UserName") = UserName
            dr("UserID") = UserId
            dr("ActiveTime") = Date.Now '
记录登录时间
                   DataTables("UsersNow").Save()
            wb.AppendCookie("username",UserName'
将用户名和密码写入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 & "'")
     Dim dr As DataRow = DataTables("UsersNow").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
[此贴子已经被作者于2017/5/22 16:37:18编辑过]

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


加好友 发短信
等级:二尾狐 帖子:522 积分:5033 威望:0 精华:0 注册:2015/4/15 15:25:00
  发帖心情 Post By:2017/5/22 16:23:00 [只看该作者]

上面贴图片和档案

图片点击可在新窗口打开查看此主题相关图片如下:111.jpg
图片点击可在新窗口打开查看

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:http20170522.foxdb

[此贴子已经被作者于2017/5/22 16:23:19编辑过]

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


加好友 发短信
等级:超级版主 帖子:13837 积分:69650 威望:0 精华:0 注册:2016/11/1 14:42:00
  发帖心情 Post By:2017/5/22 16:48:00 [只看该作者]

1、你的删除代码没有问题。删除代码,是在httprequest那里触发的,也就是,你必须有一个请求,才会删除,否则,是不会触发的。

 

2、cookie的问题,你只是看到不一样,实际使用的时候没问题的。


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


加好友 发短信
等级:二尾狐 帖子:522 积分:5033 威望:0 精华:0 注册:2015/4/15 15:25:00
  发帖心情 Post By:2017/5/23 20:34:00 [只看该作者]

老师,晚上好。

我通过Cookies中的username,解密获得登录用户的帐号,然后再从用户表中找到此用户的密码,通过必要的判断来修改密码。
上面的功能我测试成功,试用没有发现问题。

后续我准备用这样的方法,来判断登录用户在用户表中的群组、权限、职务等,从而来控制其能使用的功能。
这样处理的话,感觉跟Foxtable桌面版中的User.Name、User.Group、User.IsRole使用差不多了,这个我用起来比较熟,比较能驾驭。
(我已经放弃了从微信获得openid来作业了,感觉现在我还驾驭不了。功能很完美,可惜我能力不行。)

咨询:
1.用户只要不登出,我也不给Cookies重新赋值,那Cookies是不是不会变化的?我一直可以运用它来完成需要的功能。
2.这条路走得通吗?(或者说我这样写代码,老师觉得可行吗?)
3.这样开发过程中,我需要注意点什么?(哪些地方容易出问题?)

 回到顶部
帅哥,在线噢!
有点蓝
  20楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:107186 积分:545179 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2017/5/23 20:59:00 [只看该作者]

1、如果不设置超时时间,在浏览器没有关闭前Cookie是不会变化的

2、3、流程上说不会有什么问题,具体使用起来有问题再说



 回到顶部
总数 20 上一页 1 2