私は mvc .net アプリケーションに取り組んでおり、フォーム認証を使用しています。ユーザーが認証された後、要求したページにユーザーをリダイレクトしたい。どんな助けでも大歓迎です。
1 に答える
ASP.NET MVC 3 または 4 のインターネット アプリケーション プロジェクトを作成すると、認証時にリターン URL を使用する方法の完全な例が含まれます。
AuthorizeAttribute をコントローラーに追加して認証を強制すると、ユーザーが Login メソッドにリダイレクトされ、returnUrl パラメーターが自動的に追加されます。そこから、ログインフォームを表示するときにそれを追跡する必要があります:
public ActionResult Login(string returnUrl)
{
ViewBag.ReturnUrl = returnUrl;
return View();
}
次に、ログイン フォームのルート コレクションに追加します。
@*//ReSharper disable RedundantAnonymousTypePropertyName*@
@using (Html.BeginForm(new { ReturnUrl = ViewBag.ReturnUrl })) {
@*//ReSharper restore RedundantAnonymousTypePropertyName*@
}
ユーザーがログインを送信したら、適切に認証されていると仮定して、returnUrl にリダイレクトします。
[HttpPost]
public ActionResult Login(LoginModel model, string returnUrl)
{
return RedirectToLocal(returnUrl);
}
最も難しい部分は、GET/POST シーケンスを通じて ReturnUrl を追跡することです。
AuthorizeAttribute がどのように機能するかを確認したい場合は、この StackOverflowの投稿で、元のリクエストで returnUrl を設定する方法を示しています。
また、returnUrl が実際にローカル URL であることを確認する必要があります。そうしないと、オープン リダイレクト攻撃に対して脆弱になります。RedirectToLocal() は、この検証を行う MVC 4 Internet Application テンプレートのヘルパー メソッドです。
private ActionResult RedirectToLocal(string returnUrl)
{
if (Url.IsLocalUrl(returnUrl))
{
return Redirect(returnUrl);
}
else
{
return RedirectToAction("Index", "Home");
}
}