Как реализовать Google API Инкрементная авторизация в PHP? - PullRequest
0 голосов
/ 29 июня 2019

Я реализовал oauth2 с помощью Google, используя клиент API API googleapis / google-api-php-client в PHP, и настроил его для работы со знаком в области видимости «профиль».Я хочу использовать инкрементную авторизацию, чтобы через некоторое время после того, как пользователь вошел в систему, я мог добавить область YouTube "https://www.googleapis.com/auth/youtube.force-ssl", чтобы я мог собирать информацию о комментариях создателей YouTube. Каждый пример, который я могу найти, идет только договоря, что вам нужно добавить следующую единственную строку кода:

$client->setIncludeGrantedScopes(true);

Я сделал это, но что мне делать после того, как я аутентифицировал пользователя для входа, с этим, и теперь я хочуна самом деле запрашивать область YouTube? Я просто запускаю их через дополнительный запрос oauth? Если да, то как мне связать имя входа с областью YouTube или есть другая процедура?

Я могу запросить как профиль, так иОбласти YouTube во время первоначального входа в систему oauth без проблем, но я бы предпочел, чтобы пользователь вошел с областью профиля, а затем позже добавил область YouTube. Основная причина в том, что, хотя я просто использую это для чтения комментариев, сама область довольномногое дает сайту возможность делать что-либо, связанное с YouTube, и я не хочу отпугиватьПользователь, когда они первоначально входят в систему и получают запрос на одобрение такой высокоуровневой области.

Если бы кто-то мог указать мне или показать мне полный пример этого процесса на PHP, я был бы чрезвычайно благодарен, так как изо всех сил пыталсяс этим в течение некоторого времени.

Спасибо!

Ник

1 Ответ

0 голосов
/ 08 июля 2019

Вы должны выполнять запрос OAuth каждый раз, когда запрашиваете новую область.Таким образом, требуется более одного запроса.Вы можете использовать один файл для обработки всех запросов аутентификации.Нечто подобное должно работать ...

//set CSRF (Cross Site Request Forgery) token
if(!isset($_SESSION["state"])){
    $state = sha1(openssl_random_pseudo_bytes(1024)); 
    $_SESSION["state"] = $state;    
} else { $state = $_SESSION["state"]; }

//include Google PHP client library
require_once "../../ggl_lib/vendor/autoload.php"; 

//create client object to request authorization
$client = new Google_Client(); 
$client->setAuthConfig("path_to_key.json");
$scopes = array("profile", "email");

if ( isset($_GET["request"]) && ($_GET["request"] == "youtubeAccess") ) {   // configure authentication request to allow access to youtube info

    array_push($scopes, "https://www.googleapis.com/auth/youtube.force-ssl"); //this scope is for the youtube info
    $client->setIncludeGrantedScopes(true);
    $client->setRedirectUri("path_to_redirect_uri");                
    $client->setAccessType("offline");
    $client->setApprovalPrompt("force");    

}  else { // configure authentication to get user basic information

    $client->setApprovalPrompt("force");
    $client->setRedirectUri("path_to_redirect_uri");

}

$client->setScopes($scopes); // set scopes
$client->setState($state); // set CSRF Token

//Request authorization
if (!isset($_GET['code'])) {    
    $auth_url = $client->createAuthUrl();
    header('Location: ' . filter_var($auth_url, FILTER_SANITIZE_URL));
}

Приведенный выше подход отправляет параметр URL request=youtubeAccess, чтобы указать, что ему необходимо получить области YouTube.Если параметр отсутствует, он просто выполняет базовую авторизацию.Если вы сохраняете токен в базе данных, при каждом выполнении авторизации обязательно сохраняйте токен в базе данных.Вот как я справляюсь с добавочной авторизацией.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...