以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- [求助]MD5Encrypt和DataColChanging的问题-已解决 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=34382) |
-- 作者:shenyl0211 -- 发布时间:2013/6/6 16:35:00 -- [求助]MD5Encrypt和DataColChanging的问题-已解决 在自定义用户管理时,建立了《人员管理》表,其中有“员工姓名”、“登录密码”列。 为了及时加密,在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 -- 发布时间:2013/6/6 16:47:00 -- 如果这样你干脆都统一 写为dr("登录密码")=MD5Encrypt(val) DataColChanging中的那段代码去掉就好了.
|
-- 作者:shenyl0211 -- 发布时间:2013/6/6 16:54:00 -- 问题是还应该允许在《人员管理》表中修改密码,特别是密码遗忘的情况下,必须由管理者或开发者初始化为888。 |
-- 作者:Bin -- 发布时间:2013/6/6 16:57:00 -- 我只是说去掉ELse里面的代码.不是整个去掉 |
-- 作者:shenyl0211 -- 发布时间:2013/6/6 17:49:00 -- MainTable=tables("人员管理") \'加上这句就没事了,见1楼原文 谢谢!
|