Есть ли способ получить псевдоним пользователя youtube вместе с его адресом REAL (*@gmail.com)?
Всякий раз, когда я прошу Google аутентифицировать пользователя с областью «youtube.readonly», адрес электронной почты изменяется на « * @ pages.plusgoogle.com». Но когда я не вижу возможности YouTube, я не получаю ник YouTube …
Запросы, выполняемые клиентом API API Google ( https://github.com/google/google-api-php-client )
1. Правый адрес электронной почты / Неверное имя:
Области применения:
https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/userinfo.profile
Userinfo:
email: "********@gmail.com" //<- I need this family_name: <My last name> given_name: <My first name> name: <My full name> verified_email: true [...]
2. Неправильный адрес электронной почты / имя:
Области применения:
https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/userinfo.profile https://www.googleapis.com/auth/youtube.readonly
Userinfo:
email: "<My YT nickname>-<Random(?) ID>@pages.plusgoogle.com" family_name: "." given_name: <My YT nickname> name: <My YT nickname> //<- and I need that verified_email: true [...]
Итак: как получить электронную почту от запроса №1 и имя запроса №2 без изменения областей (что требует повторной аутентификации)?
$oauth2 = new Google_Service_Oauth2($google); if (strlen($code) > 10) { try { $accessToken = $google->authenticate($code); } catch (Google_Auth_Exception $e) { return new false; } if (!$accessToken) { return false; } $userinfo = $oauth2->userinfo->get(); var_dump($userinfo);die; }
Дамп (с областью YT)
object(Google_Service_Oauth2_Userinfo)[325] public 'email' => string '***@pages.plusgoogle.com' (length=36) //wrong email.. public 'family_name' => string '.' (length=1) public 'gender' => null public 'given_name' => string '***' (length=10) public 'hd' => null public 'id' => string '1013***' (length=21) public 'link' => string 'https://plus.google.com/1013***' (length=45) public 'locale' => null public 'name' => string '***' (length=10) public 'picture' => string 'https://lh5.googleusercontent.com/***/photo.jpg' (length=92) public 'timezone' => null public 'verified_email' => boolean true protected 'data' => array (size=0) empty protected 'processed' => array (size=0) empty
Интересный случай использования. К сожалению, в данный момент нет способа сделать это с помощью одного токена. Причина в том, что канал youtube представлен другим объектом (почти как учетная запись пользователя) в системе. И грант OAuth может принадлежать либо пользователю gmail, либо каналу youtube. Когда мы увидим область youtube в запросе, мы показываем список идентификаторов пользователя и любых каналов, которые могут быть у пользователя, и одобряющий пользователь выбирает один из них. И полученный токен принадлежит этому объекту / учетной записи.
Мы создаем новые функции, связанные с делегированием и каналами. Например, одним из возможных решений может быть получение одного токена в учетной записи пользователя, который дает вам доступ к API по всем каналам, управляемым этой учетной записью. К сожалению, на данный момент нет ETA.