2013-03-20 203 views
-1

我已经在开发服务器上实现了google plus api,它工作正常。我在生产服务器上使用了相同的代码。但是在请求权限之后,需要很长时间才能返回到我的网站并登录。Google Plus登录API无法在生产服务器上工作

任何人都可以请让我知道可能是什么原因。我用过oauth2。

下面是我使用

<?php 
session_start(); 
require_once 'googleplus/src/Google_Client.php'; 
require_once 'googleplus/src/contrib/Google_Oauth2Service.php'; 

class Webpage_UserGPlusLogin extends Webpage 
{ 
    public function __construct() 
    { 
     $temp_redirect = $_SESSION['RETURN_URL_AFTERLOGIN']; 
     $this->title = 'User Account'; 

     $client = new Google_Client(); 
     $client->setApplicationName(WEBSITE_NAME); 
     $client->setClientId(GOOGLE_PLUS_CLIENT_ID); // Client Id 
     $client->setClientSecret(GOOGLE_PLUS_CLIENT_SECRET); // Client Secret 
     $client->setRedirectUri(GOOGLE_PLUS_REDIRECT_URI); // Redirect Uri set while creating API account 
     $client->setDeveloperKey(GOOGLE_PLUS_DEVELOPER_KEY); // Developer Key 
     $oauth2 = new Google_Oauth2Service($client); 


     if (isset($_GET['code'])) { 
      $client->authenticate($_GET['code']); 
      $_SESSION['token'] = $client->getAccessToken(); 
      $redirect = GOOGLE_PLUS_REDIRECT_URI; 
      header('Location: ' . filter_var($redirect, FILTER_SANITIZE_URL)); // Redirects to same page 
      return; 
     } 

     if (isset($_SESSION['token'])) { 
      $client->setAccessToken($_SESSION['token']); 
     } 

     if (isset($_REQUEST['logout'])) { 
      unset($_SESSION['token']); 
      $client->revokeToken(); 
     } 

     if(!isset($_SESSION['email_address_user_account'])) // Check if user is already logged in or not 
     { 
      if ($client->getAccessToken()) { 
       $user = $oauth2->userinfo->get(); // Google API call to get current user information 

       $email = filter_var($user['email'], FILTER_SANITIZE_EMAIL); 
       $img = filter_var($user['picture'], FILTER_VALIDATE_URL); 
       $googleuserid = $user['id']; 
       $given_name = $user['given_name']; 
       $family_name = $user['family_name']; 
       // The access token may have been updated lazily. 
       $_SESSION['token'] = $client->getAccessToken(); 

       // If email address is present in DB return user data else insert user info in DB 
       $this->result = UserAccount::gplus_sign_up($email, $googleuserid, $given_name, $family_name); 

       // Create new user object. 
       $this->user_account = new UserAccount($this->result['id'],$this->result['email_address'],$this->result['password'],$this->result['confirmation_code'],$this->result['is_confirmed'], $this->result['first_name'], $this->result['last_name']); 

       $_SESSION['gplus_email_address'] = $email; 
       $_SESSION['gplus_first_name'] = $given_name; 
       $_SESSION['gplus_last_name'] = $family_name; 
       $_SESSION['gplus_id'] = $googleuserid; 
       $_SESSION['gplus_profile_pic'] = $img; 
       $_SESSION['email_address_user_account'] = $email; 

      } else { 
       $authUrl = $client->createAuthUrl(); 
      } 
     } 

     if(isset($temp_redirect)) 
      header("Location:".$temp_redirect); 
     else 
      header("Location:/"); 
    } 
} 

在此先感谢

+0

当你尝试使用生产站点进行连接时,浏览器的JavaScript控制台中是否有任何东西出现? 您还指出您使用的是相同的代码,您是否也在API控制台中使用相同的注册? 最后,你说它需要很长时间才能返回 - 在此之后剩下的认证流程是否真的有效?或者你看到其他问题? – Prisoner 2013-03-20 14:32:04

+0

这是非常含糊的,你可以发布你的代码,你正在启动流程,以帮助我们诊断问题?此外,如果您能够发布链接到该网站的问题正在发生,可能也有帮助。 – BrettJ 2013-03-20 15:21:35

+0

@Prisoner我试过使用相同的API控制台以及不同的,但没有成功:(,是的认证流程工作,但它需要很长时间说2-3分钟。 – user2147879 2013-03-21 07:37:37

回答

1

试试这个

使用下面的代码

instade的

$temp = json_decode($_SESSION['token']); 
$request = "https://www.googleapis.com/oauth2/v1/userinfo?alt=json";     
$curl = curl_init(); 
curl_setopt($curl,CURLOPT_URL,$request); 
curl_setopt($curl,CURLOPT_RETURNTRANSFER,1); 
curl_setopt($curl,CURLOPT_TIMEOUT,30); 
curl_setopt($curl,CURLOPT_SSL_VERIFYPEER,false); 
curl_setopt($curl, CURLINFO_HEADER_OUT, true); 
curl_setopt($curl,CURLOPT_HTTPHEADER,array('Authorization: OAuth '.$temp->access_token)); 
$response = trim(curl_exec($curl)); 
$info = curl_getinfo($curl); 
$request_header_info = curl_getinfo($curl, CURLINFO_HEADER_OUT); 

//var_dump($info); 
//var_dump($request_header_info);   
curl_close($curl); 
echo "<pre>"; 
print_r(json_decode($response));  

代码10

希望这会对你有所帮助.. :)

相关问题