Twitter oAuth callbackUrl - разработка localhost

112

Кто-нибудь еще испытывает трудности с получением URL-адреса обратного вызова Twitters oAuth для попадания в среду разработки localhost. Видимо недавно отключили. http://code.google.com/p/twitter-api/issues/detail?id=534#c1

Есть ли у кого-нибудь обходной путь. Я действительно не хочу останавливать свое развитие


источник
Это сработало для меня, установив URL-адрес обратного вызова Twitter на мой реальный URL-адрес веб-сайта. При тестировании в localhost -> регистрация в твиттере, перенаправление на localhost (вместо URL-адреса веб-сайта).
Судхакар Кришнан,

Ответы:

135

Альтернатива 1.

Настройте файл .hosts (Windows) или etc / hosts, чтобы указать действующий домен на IP-адрес вашего локального хоста. Такие как:

127.0.0.1 xyz.com

где xyz.com - ваш реальный домен.

Альтернатива 2.

Кроме того, в статье дается совет, как альтернативно использовать службу сокращения URL-адресов. Сократите локальный URL-адрес и предоставьте результат в виде обратного вызова.

Альтернатива 3.

Кроме того, похоже, что он работает, например, http://127.0.0.1:8080как обратный вызов Twitter вместо http://localhost:8080.

Тони
источник
3
Это могло быть причиной следующей ошибки: Удаленный сервер возвратил ошибку: (401) Неавторизованный?
DevDave 01
Как работает localhost, когда к нему нет туннеля? На самом деле он не попадает в локальную машину ur
Джек Так
@JackTuck Обратный вызов вызывается браузером пользователя, а не серверами Twitter.
пушистый
25

Мне просто пришлось сделать это на прошлой неделе. Видимо localhostне работает, но 127.0.0.1идет фигура.

Это, конечно, предполагает, что вы регистрируете два приложения в Twitter: одно для вашей прямой трансляции, www.mysite.comа другое для 127.0.0.1.

Адам
источник
10

Просто введите http://127.0.0.1:xxxx/ в качестве URL-адреса обратного вызова, где xxxx - это порт для вашей платформы.

Замиф
источник
8

Да, он был отключен из-за недавней проблемы безопасности, обнаруженной в OAuth. Единственное решение на данный момент - создать два приложения OAuth - одно для производства и одно для разработки. В приложении для разработки вы устанавливаете URL-адрес обратного вызова localhost вместо действующего.

Arikfr
источник
Я просто пробовал это сделать, но он не принимает localhost: 3000 в качестве формата URL ...
Дэвид Н. Велтон,
1
Да, они вроде фильтруют такие URL. :( Но поддержка пользовательских URL-адресов обратного вызова вернулась - возможно, они там поддерживаются.
arikfr
8

URL обратного вызова изменен

http://localhost:8585/logintwitter.aspx

Перевести в

http://127.0.0.1:8585/logintwitter.aspx
Хакки Эсер
источник
7

Вот как я это сделал:

Зарегистрированный URL обратного вызова: http://127.0.0.1/Callback.aspx

   OAuthTokenResponse authorizationTokens = 
        OAuthUtility.GetRequestToken(ConfigSettings.getConsumerKey(), 
                                     ConfigSettings.getConsumerSecret(), 
                                     "http://127.0.0.1:1066/Twitter/Callback.aspx");

КонфигНастройки:

public static class ConfigSettings
{
    public static String getConsumerKey()
    {
        return System.Configuration.ConfigurationManager.AppSettings["ConsumerKey"].ToString();
    }

    public static String getConsumerSecret()
    {
        return System.Configuration.ConfigurationManager.AppSettings["ConsumerSecret"].ToString();
    }

}

Web.config:

<appSettings>

    <add key="ConsumerKey" value="xxxxxxxxxxxxxxxxxxxx"/>
    <add key="ConsumerSecret" value="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"/>

</appSettings>

Убедитесь, что вы установили для свойства «использовать динамические порты» вашего проекта значение «false» и вместо этого введите статический номер порта. (Я использовал 1066).

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

ThdK
источник
7

Используйте http://smackaho.st

Что он делает, так это простая ассоциация DNS с 127.0.0.1, которая позволяет вам обходить фильтры на localhost или 127.0.0.1:

smackaho.st. 28800 IN A 127.0.0.1

Поэтому, если вы нажмете на ссылку, она покажет вам, что у вас есть на вашем локальном веб-сервере (а если у вас его нет, вы получите 404). Конечно, вы можете установить его на любую страницу / порт, который хотите:

http://smackaho.st:54878/twitter/callback

Моб
источник
6
smackaho.st больше не доступен tbaggery.com/2010/03/04/smack-a-ho-st.html . Вместо этого используйте lvh.me. Он идет прямо на localhost.
Джастин
5

Я работал с URL-адресом обратного вызова Twitter на моем локальном хосте. Если вы не знаете, как создать виртуальный хост (это важно), используйте Ampps. Он действительно классный и легкий. Через несколько шагов у вас будет собственный виртуальный хост, и тогда каждый URL-адрес будет работать на нем. Например:

  1. скачать и установить ampps

  2. Добавить новый домен. (здесь вы можете установить, например, twitter.local), это означает, что ваш виртуальный хост будет http: //twitter.local, и он будет работать после шага 3.

  3. Я работаю над Win, поэтому перейдите к файлу вашего хоста -> C: \ Windows \ System32 \ Drivers \ etc \ hosts и добавьте строку: 127.0.0.1 twitter.local

Перезагрузите Ampps, и вы сможете использовать обратный вызов. Вы можете указать любой URL-адрес, даже если вы используете какой-либо фреймворк MVC или перезаписываете URL-адрес htaccess.

Надеюсь на эту помощь! Ура.

Glibo
источник
Спасибо за чаевые. На linux просто добавьте имя домена разработки в / etc / hosts
jeremyvillalobos
3

Когда я разрабатываю локально, я всегда настраиваю локальное имя разработчика, которое отражает проект, над которым я работаю. Я установил это в xampp через xampp \ apache \ conf \ extra \ httpd-vhosts.conf, а затем также в \ Windows \ System32 \ drivers \ etc \ hosts.

Поэтому, если я настраиваю локальный сайт разработчиков для example.com, я бы установил его как example.dev в этих двух файлах.

Краткий ответ: после правильной настройки вы можете просто рассматривать этот URL ( http://example.dev ), как если бы он был действующим (а не локальным), когда вы настраиваете свое приложение Twitter.

Аналогичный ответ был дан здесь: https://dev.twitter.com/discussions/5749

Прямая цитата (выделено автором):

Вы можете указать любой действительный URL-адрес с доменным именем, которое мы узнаем на странице сведений о приложении. OAuth 1.0a требует, чтобы вы отправили значение oauth_callback на шаге токена запроса потока, и мы примем динамический обратный вызов на основе locahost на этом шаге .

Для меня это сработало как прелесть. Надеюсь это поможет.

Джо Бергевин
источник
3

Это можно сделать очень удобно с помощью Fiddler :

  • Откройте меню Tools> HOSTS ...
  • Вставьте строку вроде 127.0.0.1 your-production-domain.com, убедитесь, что стоит галочка «Включить переназначение запросов ...». Не забывайте нажимать Save.
  • Если необходим доступ к вашему реальному производственному серверу, просто выйдите из Fiddler или отключите переназначение.
  • Повторный запуск Fiddler включит переназначение (если он отмечен).

Приятным бонусом является то, что вы можете указать собственный порт, например: 127.0.0.1:3000 your-production-domain.com(было бы невозможно добиться этого через файл hosts). Также вместо IP можно использовать любое доменное имя (например, localhost).

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

Роман Бойко
источник
2

отредактируйте эту функцию в TwitterAPIExchange.php в строке # 180

public function performRequest($return = true)
{
    if (!is_bool($return)) 
    { 
        throw new Exception('performRequest parameter must be true or false'); 
    }

    $header = array($this->buildAuthorizationHeader($this->oauth), 'Expect:');

    $getfield = $this->getGetfield();
    $postfields = $this->getPostfields();

    $options = array( 
        CURLOPT_HTTPHEADER => $header,
        CURLOPT_HEADER => false,
        CURLOPT_URL => $this->url,
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_SSL_VERIFYPEER => false,
        CURLOPT_SSL_VERIFYHOST => false
    );

    if (!is_null($postfields))
    {
        $options[CURLOPT_POSTFIELDS] = $postfields;
    }
    else
    {
        if ($getfield !== '')
        {
            $options[CURLOPT_URL] .= $getfield;
        }
    }

    $feed = curl_init();
    curl_setopt_array($feed, $options);
    $json = curl_exec($feed);
    curl_close($feed);

    if ($return) { return $json; }
}
помощник
источник
Вы можете скачать TwitterAPIExchange.php отсюда github.com/J7mbo/twitter-api-php
Helper
2

У меня была такая же проблема, и я не смог указать localhost в качестве действительного URL-адреса обратного вызова. Поэтому я создал простой домен, чтобы помочь нам, разработчикам: https://tolocalhost.com

Он перенаправит любой путь к вашему домену localhost и порту, который вам нужен. Надеюсь, это может быть полезно другим разработчикам.

Йорген
источник
Отличный ресурс, но ваш домен добавляет "/" в конец URL-адреса, что в некоторых случаях приводит к 404. не могли бы вы это исправить? Например, он перенаправляется как "localhost / somename /? <response>, но это должно быть" localhost / somename? <response>
Чанна
@Channa Я пытался воспроизвести это, но похоже, что скрипт работает правильно. Какой браузер вы используете? Я пробовал Chrome, Safari, Firefox, и все работает как положено.
Jørgen
Со мной такое случается и в Chrome, и в Firefox. Это имя хоста, которое я поместил на вашу страницу « localhost: 8080 / dashboard / twitterRedirect.jsp ». Но при перенаправлении он переходит на « localhost: 8080 / dashboard / twitterRedirect.jsp /… ». Обратите внимание на символ «/» перед вопросом. отметка. Это приведет к тому, что мое приложение отправит мне 404
Чанна
1
@Channa, вы не должны помещать весь URL-адрес в поле имени хоста. Он называется: hostname, а не URL ;-) Идея состоит в том, чтобы иметь возможность переопределить localhost на что-то вроде: my.localhost.bla, тогда он будет использовать это вместо localhost. В вашем случае поле хоста должно быть localhost. Вы устанавливаете порт на 8080 и настраиваете перенаправление на: tolocalhost.com/dashboard/twitterRedirect.jsp, это перенаправляет на: localhost: 8080 / dashboard / twitterRedirect.jsp
Jørgen
2

Вроде сейчас http://127.0.0.1тоже перестали работать. Простое решение - использовать http://localtest.meвместо того, http://localhostчтобы всегда указывать на 127.0.0.1И вы даже можете добавить к нему любой произвольный поддомен, и он все равно будет указывать на127.0.0.1

См. Веб-сайт

Арон Эйнхорн
источник
1

установите callbackurl в приложении twitter: 127.0.0.1:3000 и установите WEBrick для привязки к 127.0.0.1 вместо 0.0.0.0

команда: rails s -b 127.0.0.1

Алок Ядав
источник
1

Похоже, Twitter теперь позволяет localhostнаряду со всем, что у вас есть в Callback URLнастройках, если там есть значение.

MrMakeIt
источник
1

Я боролся с этим и следовал дюжине решений, в конце концов, все, что мне нужно было сделать для работы с любым ssl apis на локальном хосте, было:

Go скачать: cacert.pem файл

В php.ini* отменить комментарий и изменить: curl.cainfo = "c:/wamp/bin/php/php5.5.12/cacert.pem"

  • Вы можете узнать, где находится ваш php.iniфайл на вашем компьютере, запустив php --iniв своем интерфейсе командной строки
  • Для удобства я поместил свой cacert.pem в тот же каталог, что и php.ini.
Льюис
источник
1

Вот шаги, которые помогли мне заставить Facebook работать с локальным приложением на моем ноутбуке:

  • goto apps.twitter.com
  • введите имя, описание приложения и URL-адрес вашего сайта. Примечание: для localhost: 8000 используйте 127.0.0.1:8000, так как первое не будет работать.
  • введите URL-адрес обратного вызова, соответствующий URL-адресу обратного вызова, указанному в TWITTER_REDIRECT_URI вашего приложения. Примечание: например: http://127.0.0.1/login/twitter/callback (localhost не будет работать).
  • Важно, введите URL-адреса «политики конфиденциальности» и «условий использования», если вы хотите запросить адрес электронной почты пользователя.
  • установите флажок согласен с условиями
  • нажмите [Create Your Twitter Application]
  • перейдите на вкладку [Ключи и токены доступа] вверху
  • скопируйте "Consumer Key (API Key)" и "Consumer Secret (API Secret)" в TWITTER_KEY и TWITTER_SECRET в вашем приложении
  • перейдите на вкладку «Разрешения» и установите соответствующий параметр «только для чтения», «чтение и запись» или «чтение, запись и прямое сообщение» (используйте наименее навязчивый вариант, необходимый для вашего приложения, поскольку только и вход OAuth «только для чтения» достаточно
  • В разделе «Дополнительные разрешения» установите флажок «запрашивать адреса электронной почты у пользователей», если вы хотите, чтобы адрес электронной почты пользователя возвращался в данные для входа в OAuth (в большинстве случаев отметьте «да»).
Kmeixner
источник