前提・実現したいこと
参考サイトに従い、Webサイトのログイン機能の実装を試みています。
記載の修正箇所以外の自動生成されたファイルや、フォルダは触っておりません。
コピペですが、自身の修正または追加したコード内容を提示します。
参考サイト:【初心者向け】ASP.NET MVC5 ログイン機能の実装方法
config
1//プロジェクトのWeb.config 2 3// 以前自動生成箇所 4// ・ 5// ・ 6// ・ 7 <system.web> 8 <authentication mode="None" /> 9 <compilation debug="true" targetFramework="4.5"> 10 <assemblies> 11 <add assembly="System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /> 12 </assemblies> 13 </compilation> 14 <httpRuntime targetFramework="4.5" /> 15 <!-- 認証設定--> 16 <authentication mode ="Forms"> 17 <forms loginUrl="/Auth/Login" /> 18 </authentication> 19 <!-- 承認設定--> 20 <authentication> 21 <deny users="?" /> 22 </authentication> 23 <httpModules> 24 <add name="ApplicationInsightsWebTracking" type="Microsoft.ApplicationInsights.Web.ApplicationInsightsHttpModule, Microsoft.AI.Web" /> 25 </httpModules> 26 </system.web> 27// ・ 28// ・ 29// ・ 30// 以降自動生成箇所
C#
1//Models内に作成したAuthModel.cs 2 3using System.ComponentModel.DataAnnotations; 4 5namespace TestWebSite1.Models 6{ 7 public class AuthModel 8 { 9 [Display(Name = "ユーザーID")] 10 [Required(ErrorMessage ="ユーザーIDは必須入力です")] 11 public string Id { get; set; } 12 13 [Display(Name = "パスワード")] 14 [Required(ErrorMessage = "パスワードは必須入力です")] 15 public string Password { get; set; } 16 } 17}
C#
1// Views\Auth内に作成したLogin.cshtml 2 3@model TestWebSite1.Models.AuthModel 4@{ 5 ViewBag.Title = "ログイン"; 6} 7<h2>@ViewBag.Title</h2> 8@using (@Html.BeginForm()) 9{ 10 <div class="form-item"> 11 @Html.LabelFor(model =>model.Id) 12 @Html.TextBoxFor(model => model.Id) 13 </div> 14 <div class="form-item"> 15 @Html.LabelFor(model => model.Password) 16 @Html.TextBoxFor(model => model.Password) 17 </div> 18 <div class="button-panel"> 19 <input type="submit" class="button" value="ログイン" /> 20 </div> 21 <br /> 22 <label style="color:#ff0000">@Html.ValidationSummary()</label>
C#
1// Views\Shared内にある_Layout.cshtml 2 3 <div class="navbar-header"> 4 <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse"> 5 <span class="icon-bar"></span> 6 <span class="icon-bar"></span> 7 <span class="icon-bar"></span> 8 </button> 9 @Html.ActionLink("TestLogin", "Index", "Home", new { area = "" }, new { @class = "navbar-brand" }) 10 </div> 11 <div class="navbar-collapse collapse"> 12 <ul class="nav navbar-nav"> 13 <li>@Html.ActionLink("ホーム", "Index", "Home")</li> 14 <li>@Html.ActionLink("詳細", "About", "Home")</li> 15 <li>@Html.ActionLink("連絡先", "Contact", "Home")</li> 16 </ul> 17 @if (Request.IsAuthenticated) 18 { 19 <ul class="nav navbar-nav navbar-right"> 20 <li>@Html.ActionLink("ログアウト","LogOut","Auth")</li> 21 </ul> 22 } 23 else 24 { 25 <ul class="nav navbar-nav navbar-right"> 26 <li>@Html.ActionLink("ログイン","Login","Auth")</li> 27 </ul> 28 } 29 </div>
C#
1// Contollers内に作成したAuthController 2 3using System.Web.Mvc; 4using System.Web.Security; 5using TestWebSite1.Models; 6 7namespace TestWebSite1.Controllers 8{ 9 public class AuthController : Controller 10 { 11 /// <summary> 12 /// ログイン表示 13 /// </summary> 14 /// <returns></returns> 15 [HttpGet] 16 public ActionResult Login() 17 { 18 return View(); 19 } 20 21 /// <summary> 22 /// ログイン処理 23 /// </summary> 24 /// <param name="model"></param> 25 /// <returns></returns> 26 [HttpPost] 27 public ActionResult Login(AuthModel model) 28 { 29 // サンプルの為、ハードコーティング 30 if(model.Id == "TestUser1" && model.Password == "TestPass1234") 31 { 32 // ユーザー認証 失敗 33 FormsAuthentication.SetAuthCookie(model.Id, true); 34 return RedirectToAction("Index", "Home"); 35 } 36 else 37 { 38 // ユーザー認証 失敗 39 this.ModelState.AddModelError(string.Empty, "指定されたユーザー名またはパスワードが正しくありません。"); 40 return this.View(model); 41 } 42 } 43 44 /// <summary> 45 /// ログアウト処理 46 /// </summary> 47 /// <returns></returns> 48 public ActionResult Logout() 49 { 50 FormsAuthentication.SignOut(); 51 return RedirectToAction("Auth", "Index"); 52 } 53 } 54}
発生している問題・エラーメッセージ
コード完成後初めて実行した際には下記のエラーが発生していました。
HTTP Error 400. The size of the request headers is too long.
そのため、上記のエラー解消法を調べた結果、Cookieをリセットしました。
するとError 400は出なくなりましたが、今度は下記のエラーが出てしまいます。
このページは動作していませんlocalhost でリダイレクトが繰り返し行われました。 Cookie を消去してみてください. ERR_TOO_MANY_REDIRECTS
再度Cookieを削除するも改善されません。
エラーメッセージを基に調べるも、WordPressの.htaccessのリダイレクト方法が出てくるばかりでC#での改善方法が出てきません
そのため原因がわからずです。どう対処したらよろしいのでしょうか?
#追記
参考サイト2を基にプロジェクトを作成しようとしたところ、
本来はASP.NET web Application (.net Framework)での作成と記載があるのですが、自身の一覧にはASP.NET web アプリケーションのみで対象のプロジェクトが作れませんでした。
参考サイト:ASP.NET Identity を空または既存の Web フォーム プロジェクトに追加する
原因を調べたのですが、このサイトと唯一違うところが、
サイト側の環境:Visual Studio2017
自身の環境:Visual Studio2015
となっております。
現在の環境上、Visual Studio2015を使用したいのですが、調べても対象のプロジェクトを一覧に追加する方法が出てきません。
また、試しにASP.NET web アプリケーションでプロジェクトを作成し、記載のコードに修正したのですが、状況はフォーム認証の時と変わっておりませんでした。
この場合2017でないと作成できないのでしょうか?
補足情報(FW/ツールのバージョンなど)
OS : Windows10 Pro 64bit
IDE : Visual Studio 2015
Browser : Google Chrome バージョン: 84.0.4147.105(Official Build) (64 ビット)
プロジェクトの保存先はサーバーとの接続はしていないため、ローカル保存してあります。
足りない情報があれば随時追加します。
回答1件
あなたの回答
tips
プレビュー