5

ASP.NET MVC의 양식 인증에 대해 머리를 감싸려고합니다. 문제가 발생한 경우 MVC 5 내 구체적인 경우.AuthorizeAttribute가/Account/Login으로 리디렉션을 계속합니다.

내 응용 프로그램은 암호를 사용하지 않고 전자 메일 주소를 사용자 이름으로 사용합니다.

Login 메서드를 디버깅 할 때 해당 모델이 유효하고 내 (사용자 지정) MembershipProvider이 예상대로 사용자의 유효성을 확인할 수 있습니다.
그런 다음 제공되는 returnUrl으로 리디렉션됩니다 (테스트 목적 상,/Home/About에 AuthorizeAttribute이 있음).

슬프게도 나는 Login 뷰로 즉시 돌아가므로 전체 프로세스의 기본 요소가 빠져 있다는 것은 명백합니다. (확장, 전체 인증/인증 프로세스에 대한 기본적인 통찰력, 나는 거의 그것으로 놀지 않는다).

로그인 메소드 :

[HttpPost] 
[AllowAnonymous] 
[ValidateAntiForgeryToken] 
public async Task<ActionResult> Login(LoginViewModel model, string returnUrl) 
{ 
    if(ModelState.IsValid && Membership.ValidateUser(model.Email, "")) 
    { 
     FormsAuthentication.SetAuthCookie(model.Email, model.RememberMe); 

     if (Url.IsLocalUrl(returnUrl)) 
     { 
      return RedirectToLocal(returnUrl); 
     } 
     else 
     { 
      return RedirectToAction("Index", "Home"); 
     } 
    } 
    else 
    { 
     ModelState.AddModelError("", "Email address unknown"); 
    } 

    return View(model); 
} 

LoginViewModel :

public class LoginViewModel 
{ 
    [Required] 
    [Display(Name = "Email")] 
    [EmailAddress] 
    public string Email { get; set; } 

    [Display(Name = "Remember me?")] 
    public bool RememberMe { get; set; } 
} 

의 Web.config의 관련 부분 :

<system.web> 
    <authentication mode="Forms"> 
     <forms loginUrl="~/Account/Login" timeout="2880" /> 
    </authentication> 
</system.web> 

내가 무엇을보고 있지 않다? 어디서 볼 수 있니?

+0

내가 전문가는을 (전혀)는 아니지만, 당신의 코드를 단계별로 할 때, 뷰 모델이 유효하게 않습니다 –

+0

일을? 그 외에는 authorize 특성 대신 IsAuthorised를 사용합니다. – jbutler483

+0

@ jbutler483 예, 그렇지 않은 경우 리디렉션이 없습니다. –

답변

4

FormsAuthentication을 사용하여 쿠키를 설정하고 있습니다. MVC5를 사용하는 경우 [Authorize] 속성을 사용하여 해당 유형의 인증을 제거합니다.

web.config에서 찾으십시오. FormsAuthentication을 사용하려면 해당 행을 제거하십시오.

<system.webServer> 
    <modules> 
     <remove name="FormsAuthentication" /> 
    </modules> 
    </system.webServer> 

당신은 마이크로 소프트가 대신 OWIN을 MVC5에있는 FormsAuthentication을 제거하는 방법을 사용하는 이유에 대해 숙지 할 수 있습니다 : http://blogs.msdn.com/b/webdev/archive/2013/07/03/understanding-owin-forms-authentication-in-mvc-5.aspx

+0

멋진! 고마워요! –

0

이 동작은 IIS 익스프레스의 잘못된 설정으로 인해 발생할 수 있습니다.

IISExpress 설정을 확인하십시오. 프로젝트에서 F4을 누르거나 프로젝트 파일 *.csproj을 편집하십시오.

  1. 속성 설정 Anonymous Authentication ~ Enabled;
  2. 속성을 Windows Authentication에서 Disabled으로 설정하십시오.

또는 편집 구성 : jbutler483 @

<PropertyGroup> 
    <IISExpressAnonymousAuthentication /> 
    <IISExpressWindowsAuthentication /> 
관련 문제