2012-06-12 3 views
0

안녕하세요,모든 요청을 캐치하고 필요한 경우 합의가있는 페이지로 리디렉션 하시겠습니까?

최종 사용자가 계정을 만들 수있는 ASP.NET MVC 웹 사이트가 있습니다. 나는 그러나 그 (것)들이 logedin 동안이 위치에 다른 어떤 웹 페이지에 도착할 수 있으면 안된다 thay 로그인 및 만약에 아닙니다 그렇다면 동의를 처음으로주는 것이 그 (것)들을 필요로한다.

이 경우 가능합니까?

+3

캐싱 및 리디렉션과 관련하여 어떤 영향이 있습니까? – usr

+0

다음 계정 만들기 페이지의 계약 부분을 확인하십시오. 필요한 경우 계정 정보를 입력하기 전에 계약서를 읽었다 고 말하는 버튼을 클릭하십시오. – Paparazzi

+0

@usr : 죄송합니다. 제목이 변경되었습니다. – Banshee

답변

1

사용자 지정 권한 부여 특성을 만드는 것이 쉬운 방법입니다. 아래에서는 사용자가 인증되고 권한이 부여 된 경우 속성 검사를 승인하고, 그렇다면 db 확인을 통해 사용자가 확인되었는지 확인하고 개인 변수 isNotConfirmed을 true로 설정하지 않으면 false를 반환합니다.

HandleUnauthorizedRequest에는 인증 이유를 확인해야합니다. 실패한 경우 사용자가 확정 페이지로 리디렉션 할 수 있습니다.

public class CustomAuthorize : AuthorizeAttribute 
    { 
    bool isNotConfirmed = false; 

    protected override bool AuthorizeCore(HttpContextBase httpContext) 
    {  
     if (base.AuthorizeCore(httpContext)) 
     { 
     //if the user is not confirmed set isNotConfirmed true and return false; 
     isNotConfirmed = true; 

     // else return true; 
     } 

     return false; 
    } 

    protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext) 
    { 
     if (isNotConfirmed) 
     { 
     filterContext.Result = new RedirectResult("/Confirm"); 
     } 
     else 
     { 
     base.HandleUnauthorizedRequest(filterContext); 
     } 
    } 
    } 
0

가장 간단한 방법은 ASP.Net 멤버쉽 및 프로필 공급자를 사용하는 것입니다.

Membership Provider은 기본 사용자 인터페이스 (암호, 암호 재설정 등)를 관리 할 수있는 기본 인프라를 제공합니다.

Profile Providerstore things about your users이며 회원 가입 여부에 관계없이 플래그를 포함 할 수 있습니다.

사용자가 로그인 할 때 프로필 제공자가 회원 계약서에 서명했는지 확인하십시오. 그렇지 않은 경우 해당 페이지로 리디렉션하십시오.

UPDATE 귀하의 코멘트에

을 바탕으로, 당신은 다음을 수행 할 수

편집 로그인 컨트롤러

그들이 계약에 서명 추가 역할에 할당

[HttpPost] 
[AllowAnonymous] 
public ActionResult Login(LogOnModel model, string returnUrl) 
.... 
if (!userHasSignedTheAgreement) 
{ 
    return RedirectToAction("Account", "ViewToAcceptAgreement"); 
} 
else if (Url.IsLocalUrl(returnUrl) && returnUrl.Length > 1 && returnUrl.StartsWith("/") 
    && !returnUrl.StartsWith("//") && !returnUrl.StartsWith("/\\")) 
{ 
    return Redirect(returnUrl); 
} 
else 
{ 
    return RedirectToAction("Index", "Home"); 
} 
.... 
, 확인 된 사용자

그런 다음 액세스가 제한된 컨트롤러에 다음을 추가합니다.

이 속성은 사용자가 컨트롤러를 사용하려면 ConfirmedUser 역할에 있어야한다는 것을 강요합니다.

+0

예, 이것은 이미 수행 한 작업입니다. 내가 알아야 할 것은 모든 요청을 가로 채고 사용자가 서명 또는 로그 아웃하도록하는 방법입니다. – Banshee

+0

귀하의 의견을 토대로 업데이트되었습니다. –

관련 문제