提问人:Samra 提问时间:12/8/2022 更新时间:12/8/2022 访问量:21
MembershipUser.ChangePassword 异常时回滚
MembershipUser.ChangePassword Rollback when exception
问:
我已经实现了changepassword控件,并正在尝试在代码隐藏中更新密码。它有效!但是,在测试负面方案(例如提供小于所需长度的密码)时,ChangePassword 方法会抛出 ArgumentException,这是可以的,但同时它会更新数据库中的密码。 如何正确回滚?在引发异常之前触发了哪些事件?
Try
Dim password As String = ChangePwd.NewPassword
'update passwordformat
sp.UpdatePasswordFormat(username, "1")
stepsDone += 1
Dim mu As MembershipUser = Membership.Providers("VLSqlMembershipProvider").GetUser(username, False)
'Dim resetPassword As String = mu.ResetPassword()
' returns false if the current password is invalid)
If (mu.ChangePassword(mu.ResetPassword(), password)) Then
stepsDone += 1
'update account to issecurelyupgraded = 1
sp.UpdateUserSecurelyUpgradedFlag(username)
stepsDone += 1
'Else
'sp.UpdatePasswordFormat(username, "0")
End If
Catch argsex As ArgumentException
sp.UpdatePasswordFormat(username, "0")
Catch ex As Exception
If stepsDone = 1 Then
'roll back updatepasswordformat
sp.UpdatePasswordFormat(username, "0")
ElseIf stepsDone = 2 Then
'roll back first 2 steps
End If
End Try
一些背景
我正在从清除密码格式迁移到哈希密码格式,并有一个自定义哈希实现。
<membership defaultProvider="VLSqlMembershipProvider" hashAlgorithmType="customhash">
这就是为什么我首先将密码格式从 0 更新为 1,然后更新密码,最后将我的脏标志设置为 false。
答: 暂无答案
评论