[ad_1]
OK、これを投稿する前に(もちろん個別に)すべての提案を調査して試しましたが、毎回壁にぶつかりました
これは私のログイン ビューです。この問題に対する多くの回答で見たように、ViewBag を使用して ReturnUrl 値を渡しました。
<h2>Login</h2> @using (Html.BeginForm("Login", "Account", new { ReturnUrl = ViewBag.ReturnUrl }, FormMethod.Post, new { role = "form" })) { @Html.AntiForgeryToken() ...............
そして、これはログインアクションの結果です
[HttpPost] [AllowAnonymous] [ValidateAntiForgeryToken] public ActionResult Login(UserLogin login, string returnUrl="") { string message = ""; using (NerdsContext nc = new NerdsContext()) { var v = nc.User.Where(a => a.email == login.email).FirstOrDefault(); if (v != null) { if (!v.IsEmailVerified) { ViewBag.Message = "Please verify your email first"; return View(); } if (string.Compare(Crypto.Hash(login.password), v.password) == 0) { int timeout = login.rememberMe ? 525600 : 20; // 525600 min = 1 year var ticket = new FormsAuthenticationTicket(login.email, login.rememberMe, timeout); string encrypted = FormsAuthentication.Encrypt(ticket); var cookie = new HttpCookie(FormsAuthentication.FormsCookieName, encrypted); cookie.Expires = DateTime.Now.AddMinutes(timeout); cookie.HttpOnly = true; Response.Cookies.Add(cookie); //Redirect the user to new url if (Url.IsLocalUrl(returnUrl)) { ViewBag.ReturnUrl = returnUrl; return Redirect(returnUrl); } else { return RedirectToAction("Nerd", "Home"); } } else { message = "Invalid credential provided"; } } else { message = "Invalid credential provided"; } } ViewBag.Message = message; return View(); }
最後に、これは web.config ファイルに追加した行です
<authentication mode="Forms"> <forms cookieless="UseCookies" loginUrl="/Account/Login" timeout="30" slidingExpiration="true" protection="All"></forms> </authentication>
そして、これを実行すると、実際にログインすることはありません。常にログインページに戻り、returnUrl の値は常に null です。
では、ここで何が起こっているのでしょうか????
私が試したこと:
この問題に関する多くの投稿を見て、ほとんどすべてを試しましたが、役に立ちませんでした..ここで助けていただければ幸いです
解決策 1
解決策についてはよくわかりませんが、次の 2 つのオプションを提供できます。
1) UserLogin クラスに returnUrl というプロパティを追加します。 次に、html フォームで、この値を使用して非表示タイプの入力を入力します (UserLogin に含めるため)。 明らかに、コントローラーでは UserLogin タイプのパラメーターを 1 つだけ受け取り、そこから returnUrl にアクセスできます。
2) パラメータ ReturnUrl (HTML コード内) と returnUrl (コントローラ内) を呼び出す代わりに、まったく同じケース (または両方の ReturnUrl または両方の returnUrl) で両方を呼び出します。
この提案がお役に立てば幸いです。
解決策 2
よく検索した後、ここで答えを見つけました
authentication – Asp.net MVC ReturnUrl値は常にnullです[^]
system.WebServer 内の web.config のモジュールにこれらの行を追加する必要がありました
<remove name="FormsAuthentication" /> <add name="FormsAuthentication" type="System.Web.Security.FormsAuthenticationModule" />
[ad_2]
コメント