2016-05-03 3 views
0

В основном моя цель - создать форму, которая позволяет каждому посетителю моего сайта загружать видео в разделе комментариев на мой СОБСТВЕННЫЙ канал. В настоящее время я использую API OAuth версии 3 для него. Проблема возникает каждые 3600 секунд, код с YouTube будет истек, и мы будем перенаправлены в Google OAuth, который запрашивает разрешение (пример: https://accounts.google.com/o/oauth2/auth?client_id=805j8tubb260venakqj8jq3f6hl9eluu.apps.googleusercontent.com). И нам нужно вручную щелкнуть кнопку «разрешить» каждый раз, когда истечет срок действия кнопки.Youtube oAuth 2.0 API постоянный код для извлечения токенов

Возможно ли разрешить доступ один раз, а затем нам не нужно снова брать код, чтобы предоставить разрешение на загрузку посетителя сайта?

ответ

1

Постарайтесь проверить, выполняете ли вы шаги/процедуры здесь в этом documentation.

1. Зарегистрируйте свое приложение в качестве установленного приложения

2. Запрос доступа токенов

3. Решение согласия пользователя

  • На этом этапе пользователь решает, предоставлять ли вашему приложению возможность делать запросы API, которые разрешены как пользователь. Сервер авторизации Google отображает имя вашего приложения и сервисов API Google, запрашивающее разрешение на доступ с учетными данными авторизации пользователя. Затем пользователь может согласиться или отказаться предоставить доступ к вашему приложению.

4. Ответ ручки от Google

5. Код авторизации обмена для обновления и доступа лексем

6. реагирования и хранить маркеры процесса

Здесь Google ответит на ваш запрос POST, возвращая объект JSON, который содержит токен доступа и токен обновления.

{ 
    "access_token" : "ya29.AHES6ZTtm7SuokEB-RGtbBty9IIlNiP9-eNMMQKtXdMP3sfjL1Fc", 
    "token_type" : "Bearer", 
    "expires_in" : 3600, 
    "refresh_token" : "1/HKSmLFXzqP0leUihZp2xUt3-5wkU7Gmu2Os_eBnzw74" 
} 

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

Маркеры доступа периодически истекает, поэтому она должна быть свежей. Когда токен доступа истекает, ваше приложение может использовать токен обновления, чтобы получить новый, действительный токен доступа. Серверные веб-приложения, установленные приложения и устройства получают обновленные токены во время процесса авторизации.

Обратите внимание, что tokens might stop, no longer work or expire если:

  • Пользователь аннулирован доступ.

  • Токен не использовался в течение шести месяцев.

  • Учетная запись пользователя превысила определенное количество запросов токенов.

+0

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

+0

Я использую API Google .NET для моего аналогичного приложения, и обновление выполняется автоматически. –

+0

@MikeMeinz привет майк. Возможно ли также, чтобы PHP получил токен автоматического обновления? Вы знаете, как работает логика? –

0

Вы должны следовать инструкциям KENDİ о том, как получить маркер - он довольно сильно потянул его прямо из документации. Но вам нужно только сделать это один раз. Хитрость заключается в том, чтобы сохранить refresh_token где-нибудь, а затем использовать это, чтобы получить новый токен доступа, прежде чем вы хотите загрузить видео. Вот мое быстрое и грязное решение NodeJS:

function getAccessToken() { 
    const options = { 
    method: 'POST', 
    uri: 'https://accounts.google.com/o/oauth2/token', 
    form: { 
     client_id: 'YOUR_CLIENT_ID', 
     client_secret: 'YOUR_CLIENT_SECRET', 
     refresh_token: 'YOUR_REFRESH_TOKEN', 
     grant_type: 'refresh_token' 
     } 
    } 

    return request(options) 
     .then(body => JSON.parse(body)); 
} 

getAccessToken.then((token) => uploadSomeYoutubeVideo()); 
Смежные вопросы