반응형
asp.net MVC에서 Attribute 및 jquery AJAX 인증
jquery ajax 함수를 사용하여 폼을 제출했습니다.사용자가 로그인하지 않으면 로그인 페이지로 리다이렉트해야 합니다.Authorize() 속성을 사용하고 있습니다.
[Authorize]
public ActionResult Creat()
{
....
}
사용자가 로그인하지 않은 경우 액션 로그인 페이지를 jquery의 Ajax 함수로 되돌리고 동일한 페이지에 표시되지만 로그인 페이지로 사용자를 리디렉션하고 싶습니다.무슨 방법이 있을까요?
작업 예: https://github.com/ronnieoverby/mvc-ajax-auth
중요 부품:
Ajax Authorize Attribute:
using System.Web.Mvc;
namespace MvcApplication1
{
public class AjaxAuthorizeAttribute : AuthorizeAttribute
{
protected override void HandleUnauthorizedRequest(AuthorizationContext context)
{
if (context.HttpContext.Request.IsAjaxRequest())
{
var urlHelper = new UrlHelper(context.RequestContext);
context.HttpContext.Response.StatusCode = 403;
context.Result = new JsonResult
{
Data = new
{
Error = "NotAuthorized",
LogOnUrl = urlHelper.Action("LogOn", "Account")
},
JsonRequestBehavior = JsonRequestBehavior.AllowGet
};
}
else
{
base.HandleUnauthorizedRequest(context);
}
}
}
}
Javascript:
$(function () {
$(document).ajaxError(function (e, xhr) {
if (xhr.status == 403) {
var response = $.parseJSON(xhr.responseText);
window.location = response.LogOnUrl;
}
});
});
컨트롤러의 Atribute를 사용합니다.
[AjaxAuthorize]
public ActionResult Secret()
{
return PartialView();
}
Ajax를 실행합니다.
@Ajax.ActionLink("Get Secret", "Secret", new AjaxOptions { UpdateTargetId = "secretArea", })
<div id="secretArea"></div>
#Ronnie의 답변에 간단하게 추가
페이지 URL을 리다이렉트로 유지할 경우.
var pathname = window.location.pathname;
if (xhr.status == 403) {
var response = $.parseJSON(xhr.responseText);
window.location = response.LogOnUrl + '?ReturnUrl=' + pathname;
}
로니 오버비의 대답의 또 다른 연장선상에서요
그의 솔루션은 webapi에서는 동작하지 않지만 일반 Authorize 속성을 대신 사용하여 다음과 같이 ajaxError 함수의 401 상태를 처리할 수 있기 때문에 괜찮습니다.
$(document).ajaxError(function (e, xhr) {
//ajax error event handler that looks for either a 401 (regular authorized) or 403 (AjaxAuthorized custom actionfilter).
if (xhr.status == 403 ||xhr.status == 401) {
//code here
}
});
언급URL : https://stackoverflow.com/questions/5258721/authorize-attribute-and-jquery-ajax-in-asp-net-mvc
반응형
'programing' 카테고리의 다른 글
PL/SQL Developer를 사용하여 원격 Oracle DB에 연결하는 방법 (0) | 2023.03.07 |
---|---|
'for;;; { json data }'와 같은 Ajax 호출 응답은 무엇을 의미합니까? (0) | 2023.03.07 |
mongodb 메모리 사용을 제한하는 옵션이 있습니까? (0) | 2023.03.07 |
jquery를 사용하여 워드프레스에서 현재 페이지 ID를 가져오는 방법 (0) | 2023.03.07 |
Angularjs $http.get() 및 목록 바인딩 (0) | 2023.03.07 |