【发布时间】:2019-08-23 17:14:23
【问题描述】:
我需要您的帮助。我正在使用 codeigniter MVC 框架通过 google 客户端库登录我的网站。当谷歌使用代码重定向并且我执行以下代码时,一切都工作正常期望 $client->getAccessToken() 。 $client->getAccessToken() 返回空值。我看了很多教程,但没有得到任何帮助。这是我的控制器功能一的代码。在这个函数中,我设置我的凭据来创建 authUrl。
public function login()
{
// Include two files from google-php-client library in controller
include_once APPPATH . 'third_party/google-api-php-client/vendor/autoload.php';
// Store values in variables from project created in Google Developer Console
$client_id = 'XXXXXX';
$client_secret = 'XXXXX';
$redirect_uri = 'path/to/mysite/login/loginGoogle';
$simple_api_key = 'XXXXXXX';
// Create Client Request to access Google API
$client = new Google_Client();
$client->setApplicationName("mysite");
$client->setClientId($client_id);
$client->setClientSecret($client_secret);
$client->setRedirectUri($redirect_uri);
$client->setDeveloperKey($simple_api_key);
$client->addScope("https://www.googleapis.com/auth/userinfo.email");
$authUrl = $client->createAuthUrl();
$data['authUrl'] = $authUrl;
$this->load->view('login',$data);
}
之后,当 google 验证并重定向到我的重定向 uri 时,这是下面给出的另一个控制器功能。问题出在这个函数上。
public function loginGoogle()
{
// Include two files from google-php-client library in controller
include_once APPPATH . 'third_party/google-api-php-client/vendor /autoload.php';
$client_id = 'XXXXXX';
$client_secret = 'XXXXX';
$redirect_uri = 'path/to/mysite/login/loginGoogle';
$simple_api_key = 'XXXXXXX';
// Create Client Request to access Google API
$client = new Google_Client();
$client->setApplicationName("mysite");
$client->setClientId($client_id);
$client->setClientSecret($client_secret);
$client->setRedirectUri($redirect_uri);
$client->setDeveloperKey($simple_api_key);
$client->addScope("https://www.googleapis.com/auth/userinfo.email");
$objOAuthService = new Google_Service_Oauth2($client);
// Add Access Token to Session
if(!isset($_SESSION['access_token'])){
if (isset($_GET['code'])) {
$client->authenticate($_GET['code']);
$token = $client->getAccessToken();
$_SESSION['access_token'] = $token;
print_r($this -> session -> userdata());exit;
header('Location: ' . filter_var($redirect_uri, FILTER_SANITIZE_URL));
}
}
// Set Access Token to make Request
if (isset($_SESSION['access_token']) && $_SESSION['access_token']) {
$client->setAccessToken($_SESSION['access_token']);
}
// Get User Data from Google and store them in $data
if ($client->getAccessToken()) {
$userData = $objOAuthService->userinfo->get();
$data['userData'] = $userData;
$_SESSION['access_token'] = $client->getAccessToken();
}}
这里的第二个函数 getAccessToken 什么都不返回,谷歌抛出了期望。请帮帮我。
【问题讨论】:
-
有趣的是,我在使用 Android 登录时遇到了同样的问题。它总是返回一个空令牌。
-
当你按照 api 文档中提到的正确做每一件事时,你仍然会遇到这些问题,这非常令人恼火。希望能在这里得到一些帮助。
标签: php codeigniter oauth oauth-2.0 google-api