让用户自主设置密码

本节的内容可以参考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

建议大家实际开发的时候,密码的传递、保存和比较,都不要使用明码,而是使用加密后的字符串。


本页地址:http://www.foxtable.com/webhelp/topics/2986.htm