2014-05-19 3 views
6

Google 계정을 사용하여 MVC5 앱에서 OWIN으로 외부 로그인을 구현하려고 시도했습니다.Google에 이미 로그인하지 않은 한 ExternalLoginCallback에서 GetExternalLoginInfoAsync null null

이미 Google에 로그인되어있는 경우 내 앱에서 google 버튼을 클릭해도 문제가 없으며 logininfo에 대한 액세스를 허용 한 후 내 등록 페이지로 이동합니다.

응용 프로그램 google 버튼을 클릭 할 때 아직 Google에 로그인하지 않은 경우, 예상대로 Google에 로그인하라는 메시지가 표시되지만 콜백 수신기가 logininfo로 로그인 한 것으로 보이지 않습니다. 아래 시나리오와 같이 콜백에서 항상 null이됩니다 ...

[AllowAnonymous] 
    public async Task<ActionResult> ExternalLoginCallback(string returnUrl) 
    { 
     var loginInfo = await AuthenticationManager.GetExternalLoginInfoAsync(); 

     if (loginInfo == null) 
     { 
      return RedirectToAction("Login"); 
     } 

     // Code omitted for brevity. 
     } 
    } 

해결 방법이나 설명이있는 사람이 있습니까? Google에 로그인 한 후 요청할 때까지 외부 쿠키가 OWIN에 제공되지 않는 것과 거의 같습니다.

+0

가능한 중복 (http://stackoverflow.com/questions/19775321/owin-returns-null [OWIN 구글이나 페이스 북에 대한 MVC5 응용 프로그램에에 allways는 null를 돌려줍니다] -allways-in-mvc5-application-for-google-or-facebook) –

답변

7

조사 일 후에 결국 대답을 찾았습니다. 문제는 Google에 로그인 한 후 다시 사이트로 리디렉션되고 로그인 할 수있는 권한이 없으므로 다시 로그인 페이지로 리디렉션됩니다. 비록 Google에 이미 로그인 한 경우 이것이 작동하는지 확실하지 않습니다. 나는

http://blog.technovert.com/2014/01/google-openid-integration-issues-asp-net-identity/

내가 내 설정 파일에 다음을 추가 ... 문서를 찾은 후이를 발견했다. 그것은 지금 작동

<location path="signin-google"> 
<system.web> 
    <authorization> 
    <allow users="*" /> 
    </authorization> 
</system.web> 
</location> 

...의

+0

이미 Google에 로그인 한 경우 외부 로그인 콜백을 피하고 단순히 앱으로 리디렉션 될 수 있습니다. 콜백은 인증 API를 호출 한 리디렉션입니다. –

+1

이것은 실제로는 관련이 없습니다. OWIN은 여기에 대한 답변이 구성하려고 시도하지 않는 범위에서이 URL을 처리합니다. 이 질문에 대한 내 답변을 참조하십시오 : http://stackoverflow.com/a/29921451/176877 –

+0

이것은 Windows 인증을 사용하고 있기 때문에 가능성이 큽니다. Google 인증을 사용하는 MVC 응용 프로그램이 아니어야합니다 . –