Foxtable(狐表)用户栏目专家坐堂 → [求助]MD5Encrypt和DataColChanging的问题-已解决


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

主题:[求助]MD5Encrypt和DataColChanging的问题-已解决

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


加好友 发短信
等级:四尾狐 帖子:977 积分:6835 威望:0 精华:0 注册:2012/4/2 21:49:00
[求助]MD5Encrypt和DataColChanging的问题-已解决  发帖心情 Post By:2013/6/6 16:35:00 [只看该作者]

在自定义用户管理时,建立了《人员管理》表,其中有“员工姓名”、“登录密码”列。

为了及时加密,在DataColChanging表事件中的相关代码如下(代码没有问题):

If MainTable.name="人员管理" Then

    If e.DataCol.Name= "登录密码"

        If e.NewValue = "" Or e.NewValue="888" And _userroles<>"开发者" And _userroles<>"管理者" Then

            MessageBox.Show("密码不能为空或888!", "提示", MessageBoxButtons.OK, MessageBoxIcon. Information)

            e.Cancel=True

        Else

            e.NewValue = MD5Encrypt(e.NewValue)

        End If

    End If

End If

为了避免借用别人名义非法登录、真实用户可以发现被借用登录,AfterOpenProject中增加了首次使用就强行更改密码的相关代码(问题代码已标识):

MainTable=tables("人员管理") '加上这句就没事了

Dim drs As List (of DataRow)

drs=DataTables("人员管理").Select("员工姓名= '" & _username & "'") 考虑员工跨部门

Dim i As Integer

Dim val As String

For Each dr As DataRow In drs

    For i=1 To 100 如果不输入新密码,就强行提示100

        If dr("登录密码")=MD5Encrypt("888") Then

            If InputValue(Val, "弃用初始密码","不准继续使用初始密码<888>" & vbcrlf & vbcrlf & "请输入新密码(不超过10个字符)") Then

                dr("登录密码")=val 问题代码

                DataTables("人员管理").save()

            End If

        Else

            Exit For

        End If

    Next

Next

其中dr("登录密码")=val是问题代码,现象是:

在开发环境下,正确的代码是dr("登录密码")=val因为DataColChanging中的e.NewValue = MD5Encrypt(e.NewValue)会完成加密。

而项目发布后,正确的代码是dr("登录密码")=MD5Encrypt(val)因为DataColChanging中的e.NewValue = MD5Encrypt(e.NewValue)竟不起作用。

因此,开发测试和最终发布只能采用不同的代码。现在问题解决了。

[此贴子已经被作者于2013-6-6 17:47:10编辑过]

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


加好友 发短信
等级:贵宾 帖子:35433 积分:178524 威望:0 精华:3 注册:2013/3/30 16:36:00
  发帖心情 Post By:2013/6/6 16:47:00 [只看该作者]

如果这样你干脆都统一 写为dr("登录密码")=MD5Encrypt(val)

DataColChanging中的那段代码去掉就好了.

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


加好友 发短信
等级:四尾狐 帖子:977 积分:6835 威望:0 精华:0 注册:2012/4/2 21:49:00
  发帖心情 Post By:2013/6/6 16:54:00 [只看该作者]

问题是还应该允许在《人员管理》表中修改密码,特别是密码遗忘的情况下,必须由管理者或开发者初始化为888。

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


加好友 发短信
等级:贵宾 帖子:35433 积分:178524 威望:0 精华:3 注册:2013/3/30 16:36:00
  发帖心情 Post By:2013/6/6 16:57:00 [只看该作者]

我只是说去掉ELse里面的代码.不是整个去掉

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


加好友 发短信
等级:四尾狐 帖子:977 积分:6835 威望:0 精华:0 注册:2012/4/2 21:49:00
  发帖心情 Post By:2013/6/6 17:49:00 [只看该作者]

MainTable=tables("人员管理") '加上这句就没事了,见1楼原文

谢谢!

 回到顶部