我想在尝试重置密码时更新单个用户的密码。
我希望对正在生成的密码有更多控制权,而不是使用Membership.Provider.ResetPassword函数。 生成的密码可能只包含大写和小写字母和数字。
所以我试过了:
的web.config
<providers>
<clear />
<add name="MyMembershipProvider"
type="Sample.MyMembershipProvider"
connectionStringName="conn1"
requiresQuestionAndAnswer="false"
applicationName="/wedding"
minRequiredPasswordLength="6"
enablePasswordRetrieval="false"
enablePasswordReset="true"
requiresUniqueEmail="true"
minRequiredNonalphanumericCharacters="0" passwordFormat="Hashed" />
</providers>
resetpassword.aspx.vb
Dim newpassword As String = GlobalFunctions.CreateNewPassword(8)'this generated the password in the format I want
Dim myConnection As SqlConnection = GetConnection()
Dim cmd As New SqlCommand("SELECT au.username, aa.ApplicationName, password, passwordformat, passwordsalt " & _
"FROM aspnet_membership am " & _
"INNER JOIN aspnet_users au " & _
"ON (au.userid = am.userid) " & _
"INNER JOIN aspnet_applications aa " & _
"ON (au.applicationId = aa.applicationid) " & _
"WHERE am.email=@email", myConnection)
cmd.Parameters.Add(New SqlParameter("@email", Email))
然后使用它来使用标准的ASP.NET存储过程更新密码:
Public Shared Function SetMemberPassword(ByVal ApplicationName As String, ByVal UserName As String, _
ByVal NewPassword As String, ByVal PasswordSalt As String, ByVal CurrentTimeUtc As DateTime, _
ByVal PasswordFormat As Integer) As Boolean
Dim result As Boolean
Dim myConnection As SqlConnection = GetConnection()
Dim cmd As New SqlCommand("aspnet_Membership_SetPassword", myConnection)
cmd.CommandType = CommandType.StoredProcedure
cmd.Parameters.Add(New SqlParameter("@ApplicationName", ApplicationName))
cmd.Parameters.Add(New SqlParameter("@UserName", UserName))
cmd.Parameters.Add(New SqlParameter("@NewPassword", NewPassword))
cmd.Parameters.Add(New SqlParameter("@PasswordSalt", PasswordSalt))
cmd.Parameters.Add(New SqlParameter("@CurrentTimeUtc", CurrentTimeUtc))
cmd.Parameters.Add(New SqlParameter("@PasswordFormat", PasswordFormat))
Try
myConnection.Open()
result = CBool(cmd.ExecuteScalar)
Catch ex As Exception
Finally
myConnection.Close()
End Try
Return result
End Function
除了新密码甚至不起作用(可能是因为我有密码格式&#34; Hashed&#34;在我的web.config中的membersrovider中),密码也以明文形式存储,我不知道&#39 ;想要。
那么,如何更新用户密码并存储密码哈希?
答案 0 :(得分:1)
为什么需要调用直接存储过程? ASP.NET成员资格提供程序负责所有事情,您只需使用asp.net提供程序的更新用户方法来更新除密码之外的所有内容。
在以下链接中查看ASP.NET和SQL成员资格提供程序中提供的所有方法。 http://msdn.microsoft.com/en-us/library/ff648345.aspx
您只需使用以下代码来更新用户信息方法。需要其他信息。
Membership.UpdateUser
用于更新密码方法。您可以使用更改密码方法。
Membership.Provider.ChangePassword(User.Identity.Name, "OldPassword", "NewPassword");
现在它正在发生,因为你直接调用asp.net成员资格提供程序存储过程,因此它将直接更新密码而不加密它。
虽然内置方法会加密它,然后它会存储它。