jQuery ajax 呼び出しを使用して、ASP.NET MVC でフォーム認証を実行することは可能ですか? そのような例を見つけることができませんでした。
より具体的には、認証された ajax リクエストを連続して作成できるように、(リダイレクトなしで) ページに認証 Cookie を設定するにはどうすればよいですか?
jQuery ajax 呼び出しを使用して、ASP.NET MVC でフォーム認証を実行することは可能ですか? そのような例を見つけることができませんでした。
より具体的には、認証された ajax リクエストを連続して作成できるように、(リダイレクトなしで) ページに認証 Cookie を設定するにはどうすればよいですか?
はい、可能です。ここでマイク・ボッシュが説明した方法を使用してログインフォームを送信し、returnUrl があれば JSON データ構造を返します。
json として返す軽量の LoginResultDTO クラスを作成しました。
public class LoginResultDTO
{
public bool Success {get;set;}
public string Message {get;set;}
public string ReturnUrl {get;set;}
}
LogOn ビューのスクリプト ブロックは次のとおりです。
<script type="text/javascript">
$(document).ready(function() {
var form = $($("form")[0]);
form.submit(function() {
var data = form.serialize();
$.post(form.attr("action"), data, function(result, status) {
if (result.Success && result.ReturnUrl) {
location.href = result.ReturnUrl;
} else {
alert(result.Message);
}
}, "json");
return false;
});
});
</script>
これにより、ログオンフォームが ajax でラップされます。これは可能な JavaScript コードの最も単純な実装ですが、開始する場所であることに注意してください。
次に、AccountController の LogOn アクションを変更し、関連する場所に次のように配置しました。
if(Request.IsAjaxRequest())
{
return Json(new LoginResultDTO{Success=true,Message="Successfully logged in"});
}else
{
return View();
}
したがって、これは超軽量ですが、asp.net mvc で jquery 認証を行う方法の完全なバージョンです。