2013-09-27 4 views
0

인증 된 사용자가 내 사이트에 대한 활성 멤버십을 가지고 있는지 확인해야합니다. 예를 들어 사용자의 회원이 활성화 된 경우 사이트의 "회원 전용"영역을 자유롭게 탐색 할 수 있지만 회원이 비활성화되거나 만료 된 경우 자동으로 웹 사이트의 청구 영역으로 리디렉션됩니다. 특정 제한된 페이지 만 볼 수 있습니다..NET MVC에서 활성 멤버 자격 유효성 구현

사용자의 회원 만료일을 FormsAuthentication 쿠키에 저장하여이 문제를 해결하려고합니다. 사용자 지정 MembershipProvider를 사용하고 있으며 사용자 ID를 이미 쿠키에 저장하고 있으므로 쉽게 할 수 있습니다. 인증 쿠키는 24 시간 내에 만료되도록 설정됩니다. 그럼 난과 같이, 사용자 정의 AuthorizeAttribute를 사용하여 회원이 활성화되어 있는지 여부를 확인합니다 :

public class MembershipAuthorizeAttribute : AuthorizeAttribute 
{ 
    private readonly bool authorizeMembership; 

    public MembershipAuthorizeAttribute() 
    { 
     this.authorizeMembership = true; 
    } 

    public MembershipAuthorizeAttribute(bool authorizeMembership) 
    { 
     this.authorizeMembership = authorizeMembership; 
    } 

    protected override bool AuthorizeCore(HttpContextBase httpContext) 
    { 
     if (this.authorizeMembership) 
     { 
      // Code to validate the membership hasn't expired 
     } 

     return base.AuthorizeCore(httpContext); 
    } 
} 

그럼 난 그냥 같은 내 컨트롤러를 장식 할 수 있습니다

[MembershipAuthorize] 
public class ActiveMembersController : Controller 
{ 
    // Only users with an active membership can access this controller 
} 

[MembershipAuthorize(false)] 
public class BillingController : Controller 
{ 
    // All members can access this controller 
} 

이 걸릴 수있는 좋은 방법이거나 거기에 사용자의 회원이 활성 여부를 확인하는 청소기/더 바람직한 방법은? 나는 사용자의 회원 만료일이나 상태를 검색하기 위해 모든 요청에서 데이터베이스를 치는 것을 선호하지 않으므로이 값을 쿠키에 저장하려고합니다. 또한 FormsAuthentication 쿠키에이 값을 저장하는 것이 좋습니까? 아니면이 값을 다른 쿠키에 저장해야합니까?

답변

0

해당 정보를 쿠키에 저장해도 올바른 방법으로 저를 공격하지 않습니다. 이유는이 대답에서 지적한대로 https://stackoverflow.com/a/706874/2168278은 쿠키가 클라이언트 시스템에 저장된다는 것입니다. 그래서 그들이 훼손 될 수 있습니다.

이 정보를 데이터베이스에 저장하는 것이 더 적합합니다. 실적에 대해 우려하는 경우 언제든지 쿼리를 캐시 할 수 있습니다.

0

나는 다르게 접근 할 것이다. 내가 만료되는 멤버십을 확인하고 해당 계정을 사용 중지하는 백그라운드 프로세스가 있습니다.

사용자가 로그인을 시도 할 경우 계정이 사용 중지되었는지 확인한 후이를 수행합니다.

관련 문제