2013-03-27 5 views
9

काम नहीं कर रहा है, मैं WordPress साइट के लिए Google+ ऑथ जोड़ने की कोशिश कर रहा हूं। मैं क्या चाहता हूं: यदि उपयोगकर्ता साइट पर पंजीकृत नहीं है तो Google+ में लेखक के बाद - मैं उसे उस पृष्ठ पर रीडायरेक्ट करता हूं जहां वह अपना उपयोगकर्ता नाम दर्ज करता है; यदि उपयोगकर्ता पहले से ही पंजीकृत है - यह में यहां लॉग इन किया जाएगा मेरी जे एस कोड:सर्वर-साइड ऐप्स के लिए Google+ साइन-इन

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']) { 
    } 
} 
यहाँ

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

प्रयोक्ता को सफलतापूर्वक Google+ में अधिकृत लेकिन php में मैं यह मिल गया:

गंभीर त्रुटि: न आया हुआ अपवाद संदेश के साथ 'Google_AuthException' 'प्राप्त करने में त्रुटि OAuth2 पहुँच टोकन, संदेश:'/var/www/html/v4/WP-सामग्री/plugins/सामाजिक/google-प्लस/google-api में redirect_uri_mismatch '' /auth/Google_OAuth2.php:113 स्टैक ट्रेस: ​​# 0/var/www/html/v4 /wp-content/plugins/social/google-plus/google-api/Google_Client.php(131): Google_OAuth2-> प्रमाणित (सरणी, '4/ScmpTqEIWt0SJ ...') # 1/var/www/html/v4 /wp-content/plugins/social/google-plus/functions.php(35): Google_Client-> प्रमाणित करें ('4/ScmpTqEIWt0SJ ...') # 2 [आंतरिक फ़ंक्शन]: login_gplus ('') # 3/var /www/html/v4/wp-includes/plugin.php(406): call_user_func_array ('login_gplus', सरणी) # 4 /var/www/html/v4/wp-admin/admin-ajax.php(74): do_action ('wp_ajax_nopriv _...') # 5 {मुख्य} लाइन 113

पर /var/www/html/v4/wp-content/plugins/social/google-plus/google-api/auth/Google_OAuth2.php में फेंक दिया

एप्लिकेशन सेटिंग पुनर्निर्देशन यूआरआई में http://example.com/wp-admin/admin-ajax.php के रूप में निर्दिष्ट। मैं गलत क्या करूँ?

संपादित:

Google+ साइन-इन बटन परिभाषा:

<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

आप [Google+ साइन-इन बटन] का उपयोग कर रहे (https://developers.google.com/+/web/signin/) या आप अपने आप को प्रवाह ट्रिगर कर रहे हैं? कृपया अपना फ्रंट-एंड कोड पोस्ट करें जो दिखाता है कि यह प्रवाह कैसे ट्रिगर किया जा रहा है। हमें उन कॉन्फ़िगरेशन पैरामीटर को देखने की आवश्यकता है जो Google को पास की जा रही हैं। (अपने क्लाइंट आईडी को छुपाएं। साथ ही, हमें आपके एसओसीआईएल_जीपीएलयूएसडीडीआरईआरयूआरआईआरआईआर – BrettJ

+0

के लिए आपके मूल्यों के PHP पक्षों को देखने की ज़रूरत है। मैं Google+ साइन-इन बटन का उपयोग कर रहा हूं। ' ' – Peter

+0

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

उत्तर

22

है आपका कोड मूल रूप से सही है, लेकिन वहाँ एक मामूली मोड़ जो मैं देख सकता है नहीं है बहुत अच्छी तरह से दस्तावेज! आपके द्वारा उपयोग किए जा रहे यूआरएल के बजाय आपको अपना रीडायरेक्टयूआई पोस्टमेसेज पर सेट करना होगा।

$client->setRedirectUri('postmessage'); 

ऐसा इसलिए है कि यह बटन से जावास्क्रिप्ट एक्सचेंज के दौरान टोकन के लिए यूआरआई सेट के साथ मेल खाता है। नमूना कोड पर एक नज़र डालें: https://github.com/googleplus/gplus-quickstart-php/blob/master/signin.php इसे क्रिया में देखने के लिए। मैं सुनिश्चित करता हूं कि हम दस्तावेज़ में एक नोट जोड़ दें।

+1

आपकी मदद के लिए धन्यवाद है। तुम मुझे बचाने के लिए। – Peter

+2

OMG !!!! मैं कोड में देखे 8 घंटों खर्च करें और इस मूर्ख 'redirect_uri_mismatch' त्रुटि से छुटकारा पाने का प्रयास करें! एन्कोडिंग के बिना, http/https के बिना, नया ऐप पंजीकृत करना, अलग-अलग सबडोमेन ..... ओह मेरे भगवान, मैंने अभी' पोस्टमेसेज 'रखा है बजाय। गूगल दोस्तों, यह भी दस्तावेज़ कृपया !!!!! –

+0

धन्यवाद, तुम मुझे बचा लिया! गूगल दस्तावेज में कुछ भी नहीं। :( – Stocki

संबंधित मुद्दे