私は私のユーザーの約10%がパスワードの変更に問題が発生しているので、私は私の髪を引き裂くいASP.NET MVC + Entity FrameworkのとアイデンティティにASP.NETアイデンティティパスワード変更の検証偽陰性
を使用しています。私はプロジェクト世代の株式コードをほとんど使用しています。唯一の変更は、成功にサインインした後に役割に応じてユーザーのリダイレクトを行うことです
ほとんどのユーザーはパスワードをシームレスに変更できますが、約10%は送信をクリックするとパスワードが間違っています間違っている。
実際にはパスワードが更新されていることが判明しましたが、エラーメッセージが原因で引き続き元のパスワードを使用しようとしています。私はデバッグするために私の開発マシンにそれを複製することはできませんが、私はクライアントで実際にそれを見てきました
誰もコードの問題を見ることができますかこれまでに経験ですか?
EDIT - 以下のコメントは以下のモデルです。彼らは、自動生成された定型的なコードです:
public class ChangePasswordViewModel
{
[Required]
[DataType(DataType.Password)]
[Display(Name = "Current password")]
public string OldPassword { get; set; }
[Required]
[StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 6)]
[DataType(DataType.Password)]
[Display(Name = "New password")]
public string NewPassword { get; set; }
[DataType(DataType.Password)]
[Display(Name = "Confirm new password")]
[Compare("NewPassword", ErrorMessage = "The new password and confirmation password do not match.")]
public string ConfirmPassword { get; set; }
}
ユーザーとパスワードをコードで設定されています
String password = "password";
String username = "user1";
var user = new ApplicationUser
{
UserName = username,
Email = "useremail.com",
};
var result = UserManager.Create(user, password);
if (result == IdentityResult.Success)
{
UserManager.AddToRole(user.Id, "Admin");
}
私は根本的な原因を見つけるためにいくつかの提案を持っています:1)コードにロギングを追加します。 ChangePasswordAsyncメソッドとChangePasswordメソッドでは、各ifステートメントで異なるメッセージを記録します。ログにユーザーIDがあることを確認して、次回誰かが問題に直面したときに、特定のユーザーのログ内のイベントをトレースできます。また、サーバーで資格情報をキャッシュしているかどうか確認してください。もしそうなら、あなたのキャッシュは新しいデータと同期していない可能性があります – Sparrow
'ChangePasswordViewModel'のコードを表示し、最初にユーザーがパスワードを作成するモデルのコードを指定します。ある場所では、 '<'のような特別な文字はパスワードでは許されているが、他の文字では許可されていないと思われる。 – trailmax