Я пытаюсь реализовать YouTube API на моем сайте CodeIgniter. Я следовал инструкциям Джима Сондерса здесь:
и здесь: http://codeigniter.com/wiki/OAuth_for_Google/
(примерно то же самое)
SO, прежде всего, мне нужно было получить секретный токен с помощью функции request_youtube
, эта функция работает правильно, я ввел свой потребительский ключ и потребительский секрет из Google, и все в порядке. Итак, я перенаправлен на YouTube, чтобы разрешить доступ к YouTube, но когда я перенаправлен на мой сайт, у меня есть две проблемы:
Url я получил:
mywebsite/example/access_youtube=&oauth_verifier=6wbPcxlOAmYQwaDU7HIhz38B&oauth_token=1/6Nfchy_nM-j4vxQzhAWTuc1J20L02bBNdcZasQP-e0s
и codeIgniter
не codeIgniter
значение “/”
и не перенаправляет меня на функцию example/access_youtube
Если я example/access_youtube
ее вручную, то я access_youtube
к моей функции access_youtube
с моими параметрами, но вот вторая (фатальная) проблема, которую я получил:
Во-первых, вот мои две переменные, которые я получил от URL:
oauth_verifier=6wbPcxlOA************ & oauth_token=1/6Nfchy_nM-j4vxQzhAWTuc1J20L02b***********
но на игровой площадке google Oauth (которую вы сможете найти здесь: http://googlecodesamples.com/oauth_playground/)
Я должен получить что-то вроде этого:
oauth_token=1/P9o-yO1Czz1q67pvPm**********************iMI& oauth_token_secret=CzeSat342hO5HzswJEq94ZPH&oauth_callback_confirmed=true
так что я имею в виду, что я не получал одинаковых переменных … почему? как я могу получить переменные thoses вместо того, что я получил? Они одинаковы ?
Во-вторых, я получил несколько ошибок в моей функции access_Youtube, CI скажет:
поэтому он не получает информации из заголовка … Я действительно не знаю, как это сделать, я следовал инструкциям Джима, но я как бы застрял там, кто-нибудь, кто пытался реализовать OAuth доступ на его сайте имеет представление?
Спасибо 🙂
Хорошо, что вы делаете, пока не получите перенаправление обратно из Google, совершенно правильно.
oauth_verifier
код – это один из них, который отправляет вас обратно, если пользователь разрешает вашему приложению получать доступ к своему профилю, поэтому вам нужен этот верификатор, чтобы получить AccessToken с помощью токена доступа, который вы сможете получить доступ к профилю / дате пользователя, какой бы объем вы ни определили.
oauth_token
это связано с вашим приложением, и Google идентифицирует вас с этим, он останется таким же для вашего приложения
поэтому, когда вы получаете AccessToken
из google / you tube API, вызывая что-то вроде
Token token=authGetRequestToken.getRequestToken(service);
этот токен запроса содержит ваш секрет, поэтому перед перенаправлением пользователя на youtube вам необходимо сохранить этот токен либо в базе данных, либо в сеансе. Когда пользователь перенаправляется обратно в ваше приложение, вам нужно вернуть этот токен, как только у вас есть этот токен, используйте проверочный код вдоль с этим токеном, чтобы получить Access_token как
Token accessToken = authGetAccessToken.getAccessToken((Token) session.get(OAuthConstants.REQUEST_TOKEN), verifier);
и как только вы получите этот accessToken
вы с радостью пойдете
надеюсь, что это имеет смысл
edit1
Verification_code отправляется системой OAuth, чтобы указать, что пользователь предоставил доступ и авторизуется сам. Это только часть механизма установления связи.
я просмотрел страницу, о которой упоминалось здесь, – это то, что было упомянуто здесь
$response = $this->google_oauth->get_request_token(site_url("/user/youtube_access")); $this->_store_somewhere($response['token_secret']);
Поэтому в token_secret
то месте просят хранить token_secret
, вы можете выбрать DB или сеанс, какой бы вы ни выбрали, поскольку этот token_secret
будет использоваться для повторного восстановления запроса на более позднем этапе
в моем примере кода я сохранил весь Request_Token
который содержит token_secret
и oauth_token
Когда пользователь перенаправляется обратно в ваше приложение, вам необходимо выполнить следующие шаги:
$token_secret = $this->_get_from_storage('token_secret'); $oauth = $this->google_oauth->get_access_token(false, $token_secret);
Здесь мы извлекаем token_secret, который мы сохранили на последнем шаге, и отправляем запрос Google на получение access_token
Я также делаю почти то же самое, передавая верификатор вместе с token_secret
надеюсь, что это ясно для вас