this questionを私が投稿した理由は、自分のメールが送信されなかった理由を理解できなかったためです。今日は少し深く掘り下げようと試みて、forgotpassword
メソッドにいくつかのブレークポイントを設定しました。変数user
がnullを返すことがわかりましたが、なぜそれほどわかりませんか?ユーザーがnullを返すのはなぜですか?
public async Task<ActionResult> ForgotPassword(ForgotPasswordViewModel model)
{
if (ModelState.IsValid)
{
var user = await UserManager.FindByNameAsync(model.Email);
if (user == null)
{
// Don't reveal that the user does not exist or is not confirmed
return View("ForgotPasswordConfirmation");
}
// For more information on how to enable account confirmation and password reset please visit http://go.microsoft.com/fwlink/?LinkID=320771
// Send an email with this link
string code = await UserManager.GeneratePasswordResetTokenAsync(user.Id);
var callbackUrl = Url.Action("ResetPassword", "Account", new { userId = user.Id, code = code }, protocol: Request.Url.Scheme);
await UserManager.SendEmailAsync(user.Id, "Reset Password", "Please reset your password by clicking <a href=\"" + callbackUrl + "\">here</a>");
return RedirectToAction("ForgotPasswordConfirmation", "Account");
}
// If we got this far, something failed, redisplay form
return View(model);
}
サイトには、電子メールアドレスがデータベースに格納されています。また、モデルに入れているものがユーザーによって使用されたものであることを確認し、それでもnullを返しました。このアプリケーションでサインオンと異なる点は、電子メールではなくユーザー名を使用するようにログインページを変更したことです。
'UserManager.FindByNameAsync()'は 'model.Email'にある値が何であれnullを返すためです。電子メールを使用したくない場合は、電子メールのプロパティを参照しないでください... –
しかし、ユーザに関連付けられた電子メールは見つかりませんか?たとえ私がUsernameに変更したとしても、それでもnullを返します。 – Skullomania
メールで名前を検索すると明らかにユーザーが見つかりません。データベースのユーザー/ログイン情報テーブルを見てください。名前に保存されているものを見てください。 Emailプロパティの内容を見てください。彼らは一致しますか?いいえ。これは魔法ではなく、あなたの意図を自動的に把握することはできません。 – Will