現在、ASP.NETでフォーラムを作成している初学者です。質問の度、回答を戴きとても助かっています。ありがとうございます。
ASP.NET Identityのログインフォームに再ログインや新規ユーザー登録が出来なくなってしまったため質問投稿をしました。
該当のエラーメッセージに指示されているソースコードの場所、つまりASP.NET Identityで自動生成されたAccountController.csを見てもデータベースを作成する記述はないように思え、ならばどこでデータベースを再生成しようとしているのかわからず途方に暮れている状況です。
もしよろしければ、解決方法をご教授頂けないでしょうか、宜しくお願いします。
ASP.NET
発生している問題・エラーメッセージ
該当のソースコード
C#
1namespace Forum.Controllers 2{ 3 [Authorize] 4 public class AccountController : Controller 5 { 6 private ApplicationSignInManager _signInManager; 7 private ApplicationUserManager _userManager; 8 9 public AccountController() 10 { 11 } 12 13 public AccountController(ApplicationUserManager userManager, ApplicationSignInManager signInManager ) 14 { 15 UserManager = userManager; 16 SignInManager = signInManager; 17 } 18 19 public ApplicationSignInManager SignInManager 20 { 21 get 22 { 23 return _signInManager ?? HttpContext.GetOwinContext().Get<ApplicationSignInManager>(); 24 } 25 private set 26 { 27 _signInManager = value; 28 } 29 } 30 31 public ApplicationUserManager UserManager 32 { 33 get 34 { 35 return _userManager ?? HttpContext.GetOwinContext().GetUserManager<ApplicationUserManager>(); 36 } 37 private set 38 { 39 _userManager = value; 40 } 41 } 42 43 // 44 // GET: /Account/Login 45 [AllowAnonymous] 46 public ActionResult Login(string returnUrl) 47 { 48 ViewBag.ReturnUrl = returnUrl; 49 return View(); 50 } 51 52 // 53 // POST: /Account/Login 54 [HttpPost] 55 [AllowAnonymous] 56 [ValidateAntiForgeryToken] 57 public async Task<ActionResult> Login(LoginViewModel model, string returnUrl) 58 { 59 if (!ModelState.IsValid) 60 { 61 return View(model); 62 } 63 64 // これは、アカウント ロックアウトの基準となるログイン失敗回数を数えません。 65 // パスワード入力失敗回数に基づいてアカウントがロックアウトされるように設定するには、shouldLockout: true に変更してください。 66 var result = await SignInManager.PasswordSignInAsync(model.UserName, model.Password, model.RememberMe, shouldLockout: false); 67 switch (result) 68 { 69 case SignInStatus.Success: 70 return RedirectToLocal(returnUrl); 71 case SignInStatus.LockedOut: 72 return View("Lockout"); 73 case SignInStatus.RequiresVerification: 74 return RedirectToAction("SendCode", new { ReturnUrl = returnUrl, RememberMe = model.RememberMe }); 75 case SignInStatus.Failure: 76 default: 77 ModelState.AddModelError("", "無効なログイン試行です。"); 78 return View(model); 79 } 80 } 81 82 // 83 // GET: /Account/VerifyCode 84 [AllowAnonymous] 85 public async Task<ActionResult> VerifyCode(string provider, string returnUrl, bool rememberMe) 86 { 87 // ユーザーがユーザー名/パスワードまたは外部ログイン経由でログイン済みであることが必要です。 88 if (!await SignInManager.HasBeenVerifiedAsync()) 89 { 90 return View("Error"); 91 } 92 return View(new VerifyCodeViewModel { Provider = provider, ReturnUrl = returnUrl, RememberMe = rememberMe }); 93 } 94 95 // 96 // POST: /Account/VerifyCode 97 [HttpPost] 98 [AllowAnonymous] 99 [ValidateAntiForgeryToken] 100 public async Task<ActionResult> VerifyCode(VerifyCodeViewModel model) 101 { 102 if (!ModelState.IsValid) 103 { 104 return View(model); 105 } 106 107 // 次のコードは、2 要素コードに対するブルート フォース攻撃を防ぎます。 108 // ユーザーが誤ったコードを入力した回数が指定の回数に達すると、ユーザー アカウントは 109 // 指定の時間が経過するまでロックアウトされます。 110 // アカウント ロックアウトの設定は IdentityConfig の中で構成できます。 111 var result = await SignInManager.TwoFactorSignInAsync(model.Provider, model.Code, isPersistent: model.RememberMe, rememberBrowser: model.RememberBrowser); 112 switch (result) 113 { 114 case SignInStatus.Success: 115 return RedirectToLocal(model.ReturnUrl); 116 case SignInStatus.LockedOut: 117 return View("Lockout"); 118 case SignInStatus.Failure: 119 default: 120 ModelState.AddModelError("", "無効なコード。"); 121 return View(model); 122 } 123 } 124 125 // 126 // GET: /Account/Register 127 [AllowAnonymous] 128 public ActionResult Register() 129 { 130 return View(); 131 } 132 133 // 134 // POST: /Account/Register 135 [HttpPost] 136 [AllowAnonymous] 137 [ValidateAntiForgeryToken] 138 public async Task<ActionResult> Register(RegisterViewModel model) 139 { 140 if (ModelState.IsValid) 141 { 142 var user = new ApplicationUser { UserName = model.UserName, Email = model.Email }; 143 var result = await UserManager.CreateAsync(user, model.Password); 144 if (result.Succeeded) 145 { 146 await SignInManager.SignInAsync(user, isPersistent:false, rememberBrowser:false); 147 148 // アカウント確認とパスワード リセットを有効にする方法の詳細については、https://go.microsoft.com/fwlink/?LinkID=320771 を参照してください 149 // このリンクを含む電子メールを送信します 150 // string code = await UserManager.GenerateEmailConfirmationTokenAsync(user.Id); 151 // var callbackUrl = Url.Action("ConfirmEmail", "Account", new { userId = user.Id, code = code }, protocol: Request.Url.Scheme); 152 // await UserManager.SendEmailAsync(user.Id, "アカウントの確認", "このリンクをクリックすることによってアカウントを確認してください <a href=\"" + callbackUrl + "\">こちら</a>"); 153 154 return RedirectToAction("Index", "Home"); 155 } 156 AddErrors(result); 157 } 158 159 // ここで問題が発生した場合はフォームを再表示します 160 return View(model); 161 } 162 163 // 164 // GET: /Account/ConfirmEmail 165 [AllowAnonymous] 166 public async Task<ActionResult> ConfirmEmail(string userId, string code) 167 { 168 if (userId == null || code == null) 169 { 170 return View("Error"); 171 } 172 var result = await UserManager.ConfirmEmailAsync(userId, code); 173 return View(result.Succeeded ? "ConfirmEmail" : "Error"); 174 } 175 176 } 177}
試したこと
ここに問題に対して試したことを記載してください。
使用環境等
Windows7
VS2017
ASP.NET MVC5
Net Framework 4.6.1
回答1件
あなたの回答
tips
プレビュー