Twitter O-Auth URL-адрес обратного вызова

У меня проблема с аутентификацией Twitter по протоколу oauth и использованием URL-адреса обратного вызова.

Я кодирую на php и использую образец кода, на который ссылается твиттер-вики, http://github.com/abraham/twitteroauth

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

Поэтому я быстро изменил метод getRequestToken (), чтобы он принимал параметр, и теперь он выглядит так:

function getRequestToken($params = array()) {
  $r = $this->oAuthRequest($this->requestTokenURL(), $params);
  $token = $this->oAuthParseResponse($r);
  $this->token = new OAuthConsumer($token['oauth_token'], $token['oauth_token_secret']);
  return $token;
}

и мой звонок выглядит так

$tok = $to->getRequestToken(array('oauth_callback' => 'http://127.0.0.1/twitter_prompt/index.php'));

Это единственное изменение, которое я сделал, и перенаправление работает как шарм, однако я получаю сообщение об ошибке, когда затем пытаюсь использовать свой недавно предоставленный доступ, чтобы попытаться позвонить. Я получаю сообщение об ошибке «Не удалось аутентифицировать вас». Кроме того, приложение никогда не добавляется к авторизованным пользователям подключения.

Теперь я прочитал спецификации и подумал, что все, что мне нужно сделать, это указать параметр при получении токена запроса. Может ли мне помочь кто-нибудь более опытный в oauth и twitter? Спасибо


person jtymann    schedule 28.09.2009    source источник


Ответы (5)


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

В любом случае, я получил эту работу, передав параметр oath_callback при получении токена запроса. Я использую PHP-библиотеку twitter-async, и мне пришлось сделать небольшую настройку, чтобы библиотека прошла URL обратного вызова.

Если вы используете twitter-async, изменения приведены ниже:

изменены функции getRequestToken и getAuthenticateURL, чтобы принимать URL-адрес обратного вызова в качестве параметра

 public function getRequestToken($callback_url = null)
  {
    $params = empty($callback_url) ? null : array('oauth_callback'=>$callback_url);
    $resp = $this->httpRequest('GET', $this->requestTokenUrl, $params);
    return new EpiOAuthResponse($resp);
  }


 public function getAuthenticateUrl($callback_url = null)
  { 
    $token = $this->getRequestToken($callback_url);
    return $this->authenticateUrl . '?oauth_token=' . $token->oauth_token;
  }

И передайте URL-адрес обратного вызова из вашего PHP-кода.

$twitterObj->getAuthenticateUrl('http://localhost/twitter/confirm.php');
person Murukesh    schedule 26.01.2011
comment
Ура - это именно та модификация, которая мне нужна. - person Gavin; 25.05.2011
comment
Для всех, кто интересуется, теперь это часть twitter-async сама по себе - person Relequestual; 23.07.2011

@Ian, twitter теперь поддерживает 127.0.0.1 и внес некоторые другие недавние изменения.

@jtymann, проверьте мой ответ здесь и посмотрите, поможет ли он

параметр Twitter oauth_callback игнорируется!

GL

джинглы

person jsh    schedule 28.07.2010

даже у меня возникла ошибка 401 .. но она решена .. во время регистрации вашего приложения в твиттере вам нужно указать URL-адрес обратного вызова ... например, http://localhost:8080.

я сделал это с помощью java ... так что мой код: String CallbackURL = "http: // localhost: 8080 / tweetproj / index.jsp"; provider.retrieveRequestToken (потребитель, CallbackURL);

где tweetproj - это имя моего проекта, а index.jsp - это всего лишь одна страница jsp ...

Надеюсь, это поможет тебе ...

person deepa    schedule 26.11.2010

После того, как пользователь авторизует приложение на twitter.com и они вернутся на ваш URL-адрес обратного вызова, вы должны обменять токен запроса на токен доступа.

person abraham    schedule 27.11.2010

Twitter не соблюдает параметр oauth_callback и будет использовать только тот, который указан в настройках зарегистрированного приложения.

Он также не позволяет использовать имена 127.0.0.1 или localhost в этом обратном вызове, поэтому я установил http://dev.twipler.com, который настроен для 127.0.0.1 в DNS, поэтому вы можете безопасно использовать;

http://dev.twipler.com/twitter_prompt/index.php
person Dead account    schedule 08.03.2010
comment
Twitter поддерживает динамические URL-адреса oauth_callback для OAuth 1.0a. tools.ietf.org/html/rfc5849#section-2.1 - person abraham; 27.11.2010