Google OAuth выдаёт ошибку Not Found

255
20 июля 2017, 00:31

Решил прикрутить к сайту аутентификацию через социальные сети. Речь пойдёт конкретно о Google. Как и полагается, в консоли управления создал новое Веб-приложение, затем активировал необходимую Google+ Api. Дальше возникла проблема. На конечном этапе, после того как пользователь разрешает доступ к своему аккаунту, через ACCESS_TOKEN пытаюсь получить email этого пользователя. Выдаёт ошибку Not Found. Перерыл документацию, не могу понять в чём дело. Код в студию:

HTML:

<a href='https://accounts.google.com/o/oauth2/auth?client_id=126263635&redirect_uri=https://mysite.ru/social.php&response_type=code&access_type=offline&state=google&scope=https://www.googleapis.com/auth/userinfo.profile https://www.googleapis.com/auth/userinfo.email'>Войти через Google</a>

social.php:

$code = trim($_GET['code']); // получаем CODE
function file_get_curl_contents($url,$params){
    $data = "";
    if(function_exists('curl_init')){
        $headers = array('Content-type: application/x-www-form-urlencoded', 'Content-length: ' . strlen($params));
        $curl = curl_init();
        curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
        curl_setopt($curl, CURLOPT_URL, $url);
        curl_setopt($curl, CURLOPT_POST, 1);
        curl_setopt($curl, CURLOPT_POSTFIELDS, urldecode($params));
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
        $data = curl_exec($curl);
        curl_close($curl);
        return $data;
    } else {
        return false;
    }
}
$client_id = '126263635'; // идентификатор приложения Google
$client_secret = 'secret126263635'; // секретный код приложения Google
$redirect_uri = 'https://mysite.ru/social.php'; // доверенный файл обработчик
// меняем CODE на ACCESS_TOKEN
$url = "https://accounts.google.com/o/oauth2/token";
$options = "client_id=".$client_id."&client_secret=".$client_secret."&redirect_uri=".$redirect_uri."&grant_type=authorization_code&code=".$code;
$get_content = file_get_curl_contents($url,$options);
$get_json = json_decode($get_content);
if(isset($get_json->{'access_token'})) {
    // используем полученный ACCESS_TOKEN для доступка к информации пользователя
    $url = "https://www.googleapis.com/plus/v1/people/me";
    $options .= "access_token=".$get_json->{'access_token'};
    $get_content = file_get_curl_contents($url,$options);
    echo $get_content; // возращает Not Found
}
Answer 1

Проблема решена. При запросе пользовательских данных, следовало использовать метод GET, вместо метода POST. Внёс коррективы в следующий блок:

$code = trim($_GET['code']); // получаем CODE
function file_get_curl_contents($url,$params,$method){
    $data = "";
    if(function_exists('curl_init')){
        $curl = curl_init();
        $headers = array('Content-type: application/x-www-form-urlencoded', 'Content-length: ' . strlen($params));
        if($method == "POST") {         
            curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
            curl_setopt($curl, CURLOPT_URL, $url);
            curl_setopt($curl, CURLOPT_POST, 1);
            curl_setopt($curl, CURLOPT_POSTFIELDS, urldecode($params));
        } elseif($method == "GET") {
            curl_setopt($curl, CURLOPT_URL, $url."?".urldecode($params));
        } else {
            return false;
        }
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
        $data = curl_exec($curl);
        curl_close($curl);
        return $data;
    } else {
        return false;
    }
}
$client_id = '126263635'; // идентификатор приложения Google
$client_secret = 'secret126263635'; // секретный код приложения Google
$redirect_uri = 'https://mysite.ru/social.php'; // доверенный файл обработчик
// меняем CODE на ACCESS_TOKEN
$url = "https://accounts.google.com/o/oauth2/token";
$options = "client_id=".$client_id."&client_secret=".$client_secret."&redirect_uri=".$redirect_uri."&grant_type=authorization_code&code=".$code;
$get_content = file_get_curl_contents($url,$options,"POST");
$get_json = json_decode($get_content);
if(isset($get_json->{'access_token'})) {
    // используем полученный ACCESS_TOKEN для доступка к информации пользователя
    $url = "https://www.googleapis.com/plus/v1/people/me";
    $options .= "access_token=".$get_json->{'access_token'};
    $get_content = file_get_curl_contents($url,$options,"GET");
    echo $get_content; // теперь возвращает нужные данные
}
READ ALSO
bool(false) в массиве

bool(false) в массиве

Вечер добрый!

236
Yii2 отправка данных клиентам через WebSocket?

Yii2 отправка данных клиентам через WebSocket?

Использую библиотеку веб-сокетов consik/yii2-websocket

348
Как удалить файл через php

Как удалить файл через php

Есть ф-ция которая по идее должна удалять файл с сервера:

205