2011-04-14 3 views
0

거의 언제든지 MVC 응용 프로그램을 실행할 때마다 홈 페이지로 이동하기 전에 오류로 인해 중지됩니다.MVC 회원 문제

UPDATE : 여기에 최신 코드입니다 :

public class RequireLoggedIn : ActionFilterAttribute 
    { 
     public override void OnActionExecuting(ActionExecutingContext filterContext) 
     { 
      if (Membership.GetUser() == null) 
      { 
       filterContext.Result = new RedirectResult("~/Logon"); 
      } 
     } 
    } 

    public ActionResult Index() 
    { 
     MembershipUser myObject = Membership.GetUser(); 
     Guid UserID = (Guid)myObject.ProviderUserKey; 

     DateTime dateTime = new DateTime(); 
     dateTime = DateTime.Now.AddDays(14); 

     var model = db.Task.Where(n => (n.UserId == UserID) && (n.Completed == false) && (n.Due < dateTime)); 
     return View(model); 

    } 
왜이 일을한다

? 과거에는 잘 돌아갔다.

도움을 주시면 감사하겠습니다.

+0

내 객체가 null하거나 공급자의 열쇠? – Andrew

+0

너무 확신 할 수는 없지만 사용자 ID를 데이터베이스의 쿼리에 사용하고 사용자를 인증하는 것이 좋습니다. – dalehumphries

+0

당신은 사용자가 (myObject == null) {RedirectToAction ("login")} 또는 이와 유사한 것을 확인할 수 있지만, 로그인 할 수있는 속성을 만들 수 있는지 확인하는 권한이 있는지 확인해야합니다. 인증 된 사용자 – Andrew

답변

0

이 예에서는 사용자가 로그인했는지 확인하는 속성을 추가합니다. 인증되지 않은 사용자가 작업을 수행하는 것을 원하지 않으므로 작업 자체에서이 작업을 관리 할 필요가 없습니다. Authorize을 사용하면 사용중인 양식이 아닌 바로이 작업을 수행 할 수 있습니다. 너무이 질문에

체크 아웃 : 당신은 내가 추천 할 것입니다 사용자 정의 속성을 만들려면 Is the Authorize attribute in ASP .NET MVC used for Authentication as well as Authorization?

는, 새로운 ActionFilterAttribute

public class RequireLoggedIn : ActionFilterAttribute 
{ 
    public override void OnActionExecuting(ActionExecutingContext filterContext) { 
     if (Membership.GetUser() == null) { 
     filterContext.Result = new RedirectResult("~/Logon"); 
     } 
    } 
} 

당신은 다음 중 하나를 꾸밀 수를 만들려면 애플리케이션 전반에 걸쳐 이러한 작업. 당신이 누군가가 로그인하지 않은 경우 단일체 : MSDN Membership.GetUser (에 따르면

+0

와우 대단히 감사합니다. :) 그래서 저는 이것을 내 HomeController의 색인 작업에서 참조 할 필요가 있습니까? 나에게 문제가되는 두 줄의 코드가 여전히 필요합니까? – dalehumphries

+0

이것은 사용자가 ActionResult에 로그인하지 않은 경우 사용자 정의 코드를 실행하지 않으므로 처음에는 문제가 발생하지 않는다는 것을 의미합니다. – Andrew

+0

모든 속성을 ActionFilterAttributes 폴더에 깔끔하게 보관하십시오. 위로 약속을 많이 더 쓰기 : – Andrew