让用户自主设置密码
本节的内容可以参考CaseStudy目录下的例子:
QQClient.Table
QQServer.Table
在OpenQQ内置的聊天窗口中,单击右上角的设置按钮,出现的设置菜单,有“修改密码”的命令。
默认情况下,单击"修改密码"命令,并不会有任何动作。
实际上,我们单击这个命令,会触发一个客户端事件UserChangePassword,我们需要在这个事件中编写代码,向服务端提交更改密码的申请,服务端收到这个申请后,会触发服务端的UserChangePassword事件,我们
同样需要在这里编写代码,保存用户提交的新密码。
客户端的设计
1、打开文件QQClient.Table,首先在客户端设计一个下图所示的窗口,用于修改密码:
2、该窗口的确定按钮的代码设置为:
Dim
OldPassword As
String = e.Form.Controls("txtOld").Text
Dim
NewPassword1 As
String = e.Form.Controls("txtNew1").Text
Dim
NewPassword2 As
String = e.Form.Controls("txtNew2").Text
If
OldPassword = ""
Then
Popmessage("请输入原密码!",
"提示", 0,
5)
Return
End
If
If
NewPassword1 <>
NewPassword2 Then
Popmessage("新密码输入不一致!",
"提示", 0,
5)
Return
End
If
Dim
msg As
String = QQClient.ChangePassword(OldPassword,
NewPassword1)
'向服务端提交更改密码的申请
If
msg = "OK"
Then
Popmessage("恭喜,密码修改成功!",
"提示", 0,
5)
e.Form.close()
ElseIf
msg > ""
Then
Popmessage("密码修改失败,原因:
" & vbcrlf
& msg,
"提示", 0,
5)
Else
Popmessage("未获得服务器回应,无法判断密码是否修改成功!",
"提示", 0,
5)
End
If
提示:QQClient的ChangePassword方法用于向服务端提交更改密码的申请,第一个参数为原密码,第二个参数为新密码。
3、将OpenQQ客户端的UserChangePassword事件代码设置为:
Forms("修改密码").Show()
服务端的设计
打开文件QQServer.Table,将OpenQQ服务端的UserChangePassword事件代码设置为:
Dim
pts() As
String = e.UserName.Split(".")
Dim
dr As
DataRow =
DataTables("用户").Find("部门
= '"
& pts(0)
&
"' And
姓名
= '"
& pts(1)
& "'")
If
dr Is
Nothing OrElse
dr("密码")
<> e.OldPassword
Then
e.ReturnMessage
= "原密码不符!"
Else
dr("密码")
= e.NewPassword
dr.Save()
e.ReturnMessage
= "OK"
'返回约定的字符,通知客户端,密码修改成功
End
If
建议大家实际开发的时候,密码的传递、保存和比较,都不要使用明码,而是使用加密后的字符串。