2013-03-27 15 views
9

Sto tentando di aggiungere Google+ auth per sito wordpress. Cosa voglio: dopo l'autenticazione in Google+ se l'utente non è registrato sul sito, lo reindirizzo alla pagina in cui inserisce il suo nome utente; se l'utente già registrato - verrà registrato nel qui mio codice js:Accesso a Google+ per autenticazione app lato server non funzionante

function doGooglePlusLogin(authResult) { 
    if (authResult['code']) { 
     jQuery('#signinButton').attr('style', 'display: none'); 
     jQuery.ajax({ 
      url: '<?php echo site_url(); ?>/wp-admin/admin-ajax.php', 
      type: 'get', 
      dataType: 'json', 
      data: { 
       action: 'login_gplus', 
       code: authResult['code'] 
      }, 
      success: function(result) { 
      }, 
     }); 
    } else if (authResult['error']) { 
    } 
} 

qui il mio codice PHP:

function login_gplus() { 
$response = array(); 

if (isset($_GET['code']) && !empty($_GET['code'])) { 
    @session_start(); 
    $client = new Google_Client(); 
    $client->setApplicationName('Test'); 
    $client->setAccessType('offline'); 
    $client->setClientId(get_option(SOCIAL_GPLUS_CLIENT_ID)); 
    $client->setClientSecret(get_option(SOCIAL_GPLUS_CLIENT_SECRET)); 
    $client->setDeveloperKey(get_option(SOCIAL_GPLUS_API_KEY)); 
    $client->setRedirectUri(get_option(SOCIAL_GPLUS_REDIRECT_URIS)); 
    $client->setApprovalPrompt('auto'); 

    $code = $_GET['code']; 
    $client->authenticate($code); 

    $token = json_decode($client->getAccessToken()); 
    $reqUrl = 'https://www.googleapis.com/oauth2/v1/tokeninfo?access_token=' . $token->access_token; 
    $req = new Google_HttpRequest($reqUrl); 

    $tokenInfo = json_decode(
      $client->getIo() 
        ->authenticatedRequest($req) 
        ->getResponseBody()); 

    if ($tokenInfo->error) { 
     $response['test'] = $tokenInfo->error; 
     send_json_response($response); 
     die(); 
    } 
    if ($tokenInfo->audience != get_option(SOCIAL_GPLUS_CLIENT_ID)) { 
     $response['test'] = "Token's client ID does not match app's."; 
     send_json_response($response); 
     die(); 
    } 
    $response['test'] = 'Succesfully connected with token: ' . print_r($token, true); 
} 
send_json_response($response); 
die(); 
} 

utente autorizzato con successo in Google+, ma in php ho ottenuto questo:

.

Errore irreversibile: eccezione non rilevata 'Google_AuthException' con messaggio 'Errore durante il recupero del token di accesso OAuth2, messaggio:' redirect_uri_mismatch '' in/var/www/html/v4/wp-content/plugins/social/google-plus/google-api /auth/Google_OAuth2.php:113Stack traccia: # 0/var/www/html/v4 /wp-content/plugins/social/google-plus/google-api/Google_Client.php(131): Google_OAuth2-> authenticate (Array, '4/ScmpTqEIWt0SJ ...') # 1/var/www/html/v4 /wp-content/plugins/social/google-plus/functions.php(35): Google_Client-> authenticate ('4/ScmpTqEIWt0SJ ...') # 2 [funzione interna]: login_gplus ('') # 3/var /www/html/v4/wp-includes/plugin.php(406): call_user_func_array ('login_gplus', Array) # 4 /var/www/html/v4/wp-admin/admin-ajax.php(74): do_action ('wp_ajax_nopriv _...') # 5 {main} gettato in /var/www/html/v4/wp-content/plugins/social/google-plus/google-api/auth/Google_OAuth2.php on line 113

In Impostazioni app Reindirizza URI specificati come http://example.com/wp-admin/admin-ajax.php. Cosa faccio di sbagliato?

EDIT:

a Google+ definizione del pulsante:

<span id="signinButton"> 
    <span class="g-signin" 
    data-callback="doGooglePlusLogin" 
    data-clientid="<?php echo $this->gplus_client_id; ?>" 
    data-cookiepolicy="single_host_origin" data-accesstype="offline" 
    data-requestvisibleactions="http://schemas.google.com/AddActivity" 
    data-scope="https://www.googleapis.com/auth/plus.login"> 
    </span> 
</span> 

SOCIAL_GPLUS_REDIRECT_URIS è example.com/wp-admin/admin-ajax.php?action=login_gplus

+0

Stai usando un [Google+ pulsante di accesso] (https://developers.google.com/+/web/signin/) o stai innescare il flusso da soli? Si prega di inviare il codice front-end che mostra come questo flusso viene attivato. Abbiamo bisogno di vedere i parametri di configurazione che vengono passati a Google. (nascondete il vostro ID cliente. Inoltre, dobbiamo vedere sul lato PHP cosa sono i valori presenti per SOCIAL_GPLUS_REDIRECT_URIS – BrettJ

+0

Sto utilizzando il pulsante Accesso a Google+. ' ' – Peter

+0

SOCIAL_GPLUS_REDIRECT_URIS è http://example.com/wp-admin/admin-ajax.php?action=login_gplus – Peter

risposta

22

Il codice è fondamentalmente giusto, ma c'è un leggero capriccio che posso vedere, non è documentato molto bene! Devi impostare il tuo redirectURI per postmessage piuttosto che l'URL che stai utilizzando.

$client->setRedirectUri('postmessage'); 

Questo è ciò che corrisponde all'URI impostato per il token durante lo scambio Javascript dal pulsante. Dai un'occhiata al codice di esempio: https://github.com/googleplus/gplus-quickstart-php/blob/master/signin.php per vederlo in azione. Mi assicurerò di aggiungere una nota alla documentazione.

+1

Grazie per il vostro aiuto. Si salva me. – Peter

+2

OMG !!!! I passare 8 ore a guardare il codice e provare a sbarazzarsi di questo stupido errore 'redirect_uri_mismatch'! Prova con la codifica, senza, http/https, registrando una nuova app, sottodomini diversi ..... oh mio dio, ho appena messo' postmessage' Google ragazzi, per favore documentatelo !!!!! –

+0

Grazie, anche tu mi hai salvato! Niente nella documentazione di Google. :( – Stocki

Problemi correlati