2014-05-19 5 views
6

Ho cercato di implementare accessi esterni con OWIN in un'app MVC5 utilizzando un account google.GetExternalLoginInfoAsync null con OWIN in ExternalLoginCallback se non si è già effettuato il login su google

Se sono già connesso a google, il clic sul pulsante google nella mia app va bene e mi porta alla pagina di registrazione dopo avermi consentito l'accesso a logininfo.

Se non ho già effettuato l'accesso a google quando faccio clic sul pulsante Google delle mie applicazioni, viene richiesto di accedere con Google come previsto, ma il ricevitore di chiamata non sembra che abbia effettuato l'accesso come logininfo è sempre nullo in questo scenario nel callback come di seguito ...

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

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

     // Code omitted for brevity. 
     } 
    } 

qualcuno ha una soluzione o una spiegazione? È quasi come se il cookie esterno non fosse reso disponibile a OWIN fino alla richiesta dopo l'accesso a google.

+0

possibile duplicato del [OWIN restituisce NULL allways in MVC5 Domanda di Google o Facebook] (http://stackoverflow.com/questions/19775321/owin-returns-null -allways-in-mvc5-application-per-google-o-facebook) –

risposta

7

Dopo giorni di indagini, alla fine ho trovato la risposta. Il problema sembra essere il fatto che dopo essersi loggati su google, reindirizza nuovamente al sito e non dispone dell'autorizzazione per l'accesso a google, quindi viene reindirizzato alla pagina di accesso. Non sono sicuro del motivo per cui funziona se è già stato effettuato l'accesso a Google. Ho scoperto questo dopo aver trovato l'articolo ...

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

ho aggiunto il seguente al mio file di configurazione.

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

ora funziona ...

+0

Se è già stato effettuato l'accesso a Google, è possibile che si eviti completamente la richiamata di accesso esterno e che vengano semplicemente reindirizzati all'app. Il callback è il reindirizzamento dal richiamo dell'API di autenticazione. –

+1

Questo in realtà è irrilevante; OWIN gestisce questo URL per te al di fuori di ciò che la risposta qui sta tentando di configurare. Vedere la mia risposta alla domanda questo è un dupe: http://stackoverflow.com/a/29921451/176877 –

+0

Questo è molto probabilmente a causa dell'autenticazione della finestra che si attiva, che non dovrebbe essere per un'applicazione MVC utilizzando l'autenticazione di google . –