Google+-Anmeldung für serverseitige App-Authentifizierung funktioniert nicht

Lesezeit: 4 Minuten

Benutzeravatar von Peter
Peter

Ich versuche, die Google+-Authentifizierung für die WordPress-Site hinzuzufügen. Was ich will: nach der Authentifizierung in Google+, wenn der Benutzer nicht auf der Website registriert ist – ich leite ihn auf die Seite weiter, auf der er seinen Benutzernamen eingibt; Wenn der Benutzer bereits registriert ist, wird er angemeldet. Hier mein js-Code:

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']) {
    }
}

hier mein PHP-Code:

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();
}

Benutzer erfolgreich in Google+ autorisiert, aber in PHP habe ich Folgendes erhalten:

Schwerwiegender Fehler: Nicht erfasste Ausnahme „Google_AuthException“ mit der Meldung „Error fetching OAuth2 access token, message: ‘redirect_uri_mismatch“ in /var/www/html/v4/wp-content/plugins/social/google-plus/google-api/auth /Google_OAuth2.php:113Stack-Trace:#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 [internal function]: 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} Eingeworfen in /var/www/html/v4/wp-content/plugins/social/google-plus/google-api /auth/Google_OAuth2.php in Zeile 113

In App-Einstellungen Umleitungs-URIs angegeben als http://example.com/wp-admin/admin-ajax.php. Was mache ich falsch?

BEARBEITEN:

Definition der Google+ Anmeldeschaltfläche:

<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 ist example.com/wp-admin/admin-ajax.php?action=login_gplus

  • Benutzt du die Google+ Anmeldeschaltfläche oder löst du den Flow selbst aus? Bitte posten Sie Ihren Front-End-Code, der zeigt, wie dieser Fluss ausgelöst wird. Wir müssen die Konfigurationsparameter sehen, die an Google übergeben werden. (Ihre Client-ID verbergen. Außerdem müssen wir auf Ihrer PHP-Seite sehen, welche Werte für Ihre SOCIAL_GPLUS_REDIRECT_URIS vorhanden sind

    – BrettJ

    27. März 2013 um 20:59 Uhr


  • Ich verwende die Google+ Anmeldeschaltfläche. <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>

    – Petrus

    28. März 2013 um 8:14 Uhr


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

    – Petrus

    28. März 2013 um 8:44 Uhr


Ihr Code ist im Grunde richtig, aber es gibt eine leichte Eigenart, die meiner Meinung nach nicht sehr gut dokumentiert ist! Sie müssen Ihren Umleitungs-URI auf postmessage und nicht auf die von Ihnen verwendete URL setzen.

$client->setRedirectUri('postmessage');

Dies ist so, dass es mit dem URI übereinstimmt, der für das Token während des Javascript-Austauschs von der Schaltfläche festgelegt wurde. Sehen Sie sich den Beispielcode an unter: https://github.com/googleplus/gplus-quickstart-php/blob/master/signin.php um es in Aktion zu sehen. Ich werde dafür sorgen, dass wir der Dokumentation eine Notiz hinzufügen.

  • Danke für Ihre Hilfe. Du rettest mich.

    – Petrus

    28. März 2013 um 14:16 Uhr

  • OMG!!!! Ich verbringe 8 Stunden damit, mir den Code anzusehen und zu versuchen, diesen Blödsinn loszuwerden redirect_uri_mismatch Error! Versuchen Sie es mit Codierung, ohne, http/https, Registrierung einer neuen App, verschiedene Subdomains … oh mein Gott, ich habe gerade gesetzt postmessage stattdessen. Google Leute, bitte dokumentiert es!!!!!

    – Mike Keskinov

    24. September 2013 um 19:09 Uhr

  • Danke, du hast mich auch gerettet! Nichts in der Google-Dokumentation. 🙁

    – Stöcki

    11. Mai 2014 um 15:43 Uhr

  • Großartig!! Ich habe diesen Fehler seit Stunden ausgegraben.

    – Suchender

    24. Oktober 2014 um 9:49 Uhr

  • Bitte aktualisieren Sie die Dokumentation auf dieser Seite (developer.google.com/+/web/signin/server-side-flow), um anzugeben, wie man die Google_Client()-Klasse richtig authentifiziert. So wie es ist, ist es mysteriös, irreführend und entmutigend.

    – Ben Birney

    6. Januar 2015 um 3:30 Uhr

1394670cookie-checkGoogle+-Anmeldung für serverseitige App-Authentifizierung funktioniert nicht

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy