0

aspnet_Membershipでセキュリティの質問と回答を更新します。通常、それはコードによって行われます:

 user.ChangePasswordQuestionAndAnswer(password, question, answer);

しかし、私はパスワードを知りません。デフォルトのストアドプロシージャがあることがわかりました。ストアドプロシージャは次のとおりです。

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER OFF
GO
ALTER PROCEDURE [dbo].[aspnet_Membership_ChangePasswordQuestionAndAnswer]
    @ApplicationName       nvarchar(256),
    @UserName              nvarchar(256),
    @NewPasswordQuestion   nvarchar(256),
    @NewPasswordAnswer     nvarchar(128)
AS
BEGIN
   DECLARE @UserId uniqueidentifier
   SELECT  @UserId = NULL
   SELECT  @UserId = u.UserId
   FROM    dbo.aspnet_Membership m, dbo.aspnet_Users u, dbo.aspnet_Applications a
   WHERE   LoweredUserName = LOWER(@UserName) AND
        u.ApplicationId = a.ApplicationId  AND
        LOWER(@ApplicationName) = a.LoweredApplicationName AND
        u.UserId = m.UserId
   IF (@UserId IS NULL)
   BEGIN
      RETURN(1)
   END

   UPDATE dbo.aspnet_Membership
     SET    PasswordQuestion = @NewPasswordQuestion, PasswordAnswer = @NewPasswordAnswer
    WHERE  UserId=@UserId
   RETURN(0)
   END

しかし、答えは明確なテキストであることがわかりました。ストアドプロシージャを使用してハッシュするにはどうすればよいですか?

ありがとう。

4

1 に答える 1

2

ユーザーにアクセスできる場合は、メンバーシップ方式を使用する前にパスワードを変更できます。

public virtual bool ChangePassword(string oldPassword, string newPassword)

あなたは試すことができます

string newPassword = user.ResetPassword();
user.ChangePassword(newPassword, "SOMENEWPASSWORD");

その後、

user.ChangePasswordQuestionAndAnswer("SOMENEWPASSWORD", question, answer);   
于 2012-04-20T14:04:25.793 に答える