開発初心者です。
質問内容等分かりにくい部分があったら申し訳ございませんが、
実現したいことが上手く出来ないのでご助言お願い致します。
前提・実現したいこと
asp.net core2.2 MVC を利用して開発の練習をしている所です。
フォーム認証でログイン後、セッションを開始し、その後のページをログインした人しか見れないようにしたいのですが、どうすればよいでしょうか。
ネットからappsettings.jsonやStartup.csのsession準備は出来ていると思います。
データベースから入力情報とデータベースを照合し、一致すればログインしてページ遷移出来るようにしました。
ページ遷移後のディレクトリにビューが2つあり、ページ内でリンクを付けています。
[Authorize]でそのページを保護するとURLに直接階層を入力しても飛べなくはなるのですが、ログイン後に別のページに行こうとすると認証が出来ずにエラーになってしまうため、セッションを使ってログインした人なら問題なくページ遷移出来るようにしたいです。
発生している問題・エラーメッセージ
セッションを確認してちゃんとページ遷移が出来る様にするにはどうしたら良いか分かりません。
また、セッションIDを人によってランダムに生成することなどは出来るのでしょうか。
該当のソースコード
C#
1 //[Authorize] 2 public class AfterLoginController : Controller 3 { 4 // GET: AfterLogin/Entry 5 public ActionResult Entry() 6 { 7 HttpContext.Session.GetInt32("test"); 8 return View(); 9 } 10 11 //GET:AfterLogin/Status 12 public ActionResult Status() 13 { 14 HttpContext.Session.GetInt32("test"); 15 return View(); 16 } 17 18 } 19} 20------------------------------------------------------ 21 public class HomeController : Controller 22 { 23 public UserContext DbContext { get; } 24 25 public HomeController(UserContext dbContext) 26 { 27 DbContext = dbContext; 28 } 29 30 31 [AllowAnonymous] 32 [HttpGet] 33 public ActionResult Index() 34 { 35 return View(); 36 } 37 38 [AllowAnonymous] 39 [HttpPost] 40 public ActionResult Index(User user) 41 { 42 43 var auth = (from u in DbContext.Users 44 where u.Name == user.Name && u.Password == user.Password 45 select u.Id).FirstOrDefault(); 46 47 if (auth == 0) 48 { 49 return View("ErrorLogin"); 50 } 51 else 52 { 53 HttpContext.Session.SetInt32("test", 123456789); 54 return View("../AfterLogin/Entry"); 55 } 56 } 57
この情報だけで足りるか分からないのですが、足りなければ教えて頂きたいです。
ご教授宜しくお願い致します。
--追記
Identityを使用して管理できるのではないかとアドバイス頂いたので、そちらも試してみようと思います。
引き続き解決法があれば宜しくお願い致します。
回答2件
あなたの回答
tips
プレビュー