Twitter oAuth callbackUrl - desarrollo localhost

112

¿Alguien más tiene dificultades para conseguir que la URL de devolución de llamada de Twitters oAuth llegue a su entorno de desarrollo localhost? Al parecer, se ha desactivado recientemente. http://code.google.com/p/twitter-api/issues/detail?id=534#c1

¿Alguien tiene una solución alternativa? Realmente no quiero detener mi desarrollo


fuente
Me funcionó al configurar la URL de devolución de llamada de Twitter en la URL de mi sitio web real. Durante la prueba en localhost -> registro de Twitter, redirigido a localhost (en lugar de la URL del sitio web).
Sudhakar Krishnan

Respuestas:

135

Alternativa 1.

Configure su archivo .hosts (Windows) o etc / hosts para apuntar un dominio en vivo a su IP de host local. como:

127.0.0.1 xyz.com

donde xyz.com es su dominio real.

Alternativa 2.

Además, el artículo da la sugerencia de utilizar alternativamente un servicio de acortador de URL. Acorte su URL local y proporcione el resultado como devolución de llamada.

Alternativa 3.

Además, parece que funciona para proporcionar, por ejemplo http://127.0.0.1:8080, una devolución de llamada a Twitter, en lugar de http://localhost:8080.

Tony
fuente
3
¿Podría esto estar causando el siguiente error: El servidor remoto devolvió un error: (401) No autorizado?
DevDave
¿Cómo funciona localhost cuando no hay un túnel? ¿En realidad no llega a tu máquina local?
Jack Tuck
@JackTuck El navegador del usuario llama a la devolución de llamada, no los servidores de Twitter.
esponjoso
25

Solo tuve que hacer esto la semana pasada. Aparentemente localhostno funciona, pero 127.0.0.1imagina.

Por supuesto, esto supone que estás registrando dos aplicaciones en Twitter, una para tu vida www.mysite.comy otra para 127.0.0.1.

Adán
fuente
8

Sí, se deshabilitó debido al reciente problema de seguridad que se encontró en OAuth. La única solución por ahora es crear dos aplicaciones OAuth: una para producción y otra para desarrollo. En la aplicación de desarrollo, estableces la URL de devolución de llamada de tu localhost en lugar de la activa.

arikfr
fuente
Intenté hacer eso, pero no acepta localhost: 3000 como formato de URL ...
David N. Welton
1
Sí, parecen filtrar esas URL. :( Pero la compatibilidad con las URL de devolución de llamada personalizadas ha vuelto, tal vez sean compatibles allí.
arikfr
8

URL de devolución de llamada editada

http://localhost:8585/logintwitter.aspx

Convertir a

http://127.0.0.1:8585/logintwitter.aspx
Hakkı Eser
fuente
7

Así es como lo hice:

URL de devolución de llamada registrada: http://127.0.0.1/Callback.aspx

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

ConfigSettings:

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>

Asegúrese de establecer la propiedad 'usar puertos dinámicos' de su proyecto en 'falso' e ingrese un número de puerto estático en su lugar. (Usé 1066).

¡Espero que esto ayude!

ThdK
fuente
7

Utilizar http://smackaho.st

Lo que hace es una asociación de DNS simple a 127.0.0.1 que le permite omitir los filtros en localhost o 127.0.0.1:

smackaho.st. 28800 PULGADAS 127.0.0.1

Entonces, si hace clic en el enlace, le mostrará lo que tiene en su servidor web local (y si no tiene uno, obtendrá un 404). Por supuesto, puede configurarlo en cualquier página / puerto que desee:

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

Multitud
fuente
6
smackaho.st ya no está disponible tbaggery.com/2010/03/04/smack-a-ho-st.html . Utilice lvh.me en su lugar. Va directamente a localhost.
Justin
5

Estaba trabajando con la URL de devolución de llamada de Twitter en mi localhost. Si no está seguro de cómo crear un host virtual (esto es importante) utilice Ampps. Es realmente genial y fácil. En unos pocos pasos, tendrá su propio host virtual y luego todas las URL funcionarán en él. Por ejemplo:

  1. descargar e instalar ampps

  2. Agregar nuevo dominio. (aquí puede configurar, por ejemplo, twitter.local), lo que significa que su host virtual será http: //twitter.local y funcionará después del paso 3.

  3. Estoy trabajando en Win, así que vaya a su archivo de host -> C: \ Windows \ System32 \ Drivers \ etc \ hosts y agregue la línea: 127.0.0.1 twitter.local

Reinicie sus Ampps y podrá usar su devolución de llamada. Puede especificar cualquier URL, incluso si está utilizando algún marco MVC o tiene una reescritura de URL de htaccess.

¡Espero que esto ayude! Salud.

Glibo
fuente
Gracias por el consejo. En Linux, simplemente agregue el nombre de dominio de desarrollo a / etc / hosts
jeremyvillalobos
3

Cuando desarrollo localmente, siempre configuro un nombre de desarrollador alojado localmente que refleja el proyecto en el que estoy trabajando. Configuré esto en xampp a través de xampp \ apache \ conf \ extra \ httpd-vhosts.conf y luego también en \ Windows \ System32 \ drivers \ etc \ hosts.

Entonces, si estoy configurando un sitio de desarrollo local para example.com, lo configuraría como example.dev en esos dos archivos.

Respuesta corta: una vez que esté configurado correctamente, simplemente puede tratar esta URL ( http://example.dev ) como si estuviera en vivo (en lugar de local) mientras configura su aplicación de Twitter.

Aquí se dio una respuesta similar: https://dev.twitter.com/discussions/5749

Cotización directa (énfasis agregado):

Puede proporcionar cualquier URL válida con un nombre de dominio que reconozcamos en la página de detalles de la aplicación. OAuth 1.0a requiere que envíe un valor oauth_callback en el paso del token de solicitud del flujo y aceptaremos una devolución de llamada dinámica basada en locahost en ese paso .

Esto funcionó de maravilla para mí. Espero que esto ayude.

Joe Bergevin
fuente
3

Se puede hacer muy convenientemente con Fiddler :

  • Abra el menú Herramientas> HOSTS ...
  • Inserte una línea como 127.0.0.1 your-production-domain.com, asegúrese de que "Habilitar reasignación de solicitudes ..." esté marcado. No olvide presionar Save.
  • Si necesita acceder a su servidor de producción real, simplemente salga de Fiddler o desactive la reasignación.
  • Al iniciar Fiddler nuevamente, se activará la reasignación (si está marcada).

Una ventaja agradable es que puede especificar un puerto personalizado, como este: 127.0.0.1:3000 your-production-domain.com(sería imposible lograr esto a través del archivo hosts). Además, en lugar de IP, puede utilizar cualquier nombre de dominio (por ejemplo, localhost).

De esta manera, es posible (pero no necesario) registrar su aplicación de Twitter solo una vez (siempre que no le importe usar las mismas claves para el desarrollo y la producción local).

Roman Boiko
fuente
2

edite esta función en TwitterAPIExchange.php en la línea # 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; }
}
Ayudante
fuente
Puede descargar TwitterAPIExchange.php desde aquí github.com/J7mbo/twitter-api-php
Helper
2

Tuve el mismo desafío y no pude dar localhost como una URL de devolución de llamada válida. Así que creé un dominio simple para ayudarnos a los desarrolladores: https://tolocalhost.com

Redirigirá cualquier ruta a su dominio localhost y al puerto que necesite. Espero que pueda ser de utilidad para otros desarrolladores.

Jørgen
fuente
Excelente recurso, pero su dominio agrega "/" al final de la URL, lo que conduce a 404 en algunas ocasiones. ¿Podrías arreglarlo? Por ejemplo, redirige como "localhost / somename /? <response>, pero debería ser" localhost / somename? <response>
Channa
@Channa Traté de reproducir esto pero parece que el script funciona correctamente. ¿Qué navegador estás usando? Probé Chrome, Safari, Firefox y funciona como se esperaba.
Jørgen
Me pasa tanto en Chrome como en Firefox. Este es el nombre de host que puse en su página " localhost: 8080 / dashboard / twitterRedirect.jsp ", pero cuando redirige va a " localhost: 8080 / dashboard / twitterRedirect.jsp /… " Tenga en cuenta el símbolo "/" antes de la pregunta marca. Hará que mi aplicación me envíe 404
Channa
1
@Channa no debe poner la URL completa en el campo del nombre de host. Se llama: nombre de host, no URL ;-) La idea es poder anular 'localhost' a algo como: my.localhost.bla, entonces lo usará en lugar de localhost. En su caso, el campo de host debe ser localhost. Establece el puerto en 8080 y configura la redirección para ir a: tolocalhost.com/dashboard/twitterRedirect.jsp, esto lo redireccionará a: localhost: 8080 / dashboard / twitterRedirect.jsp
Jørgen
2

Parece que hoy en día http://127.0.0.1también dejó de funcionar. Una solución simple es usar en http://localtest.melugar de http://localhostque siempre apunte a 127.0.0.1E incluso puede agregarle cualquier subdominio arbitrario, y aún apuntará a127.0.0.1

Ver sitio web

Aron Einhorn
fuente
1

configure callbackurl en la aplicación de Twitter: 127.0.0.1:3000 y configure WEBrick para enlazar en 127.0.0.1 en lugar de 0.0.0.0

comando: rieles s -b 127.0.0.1

Alok Yadav
fuente
1

Parece que Twitter ahora permite localhostjunto con lo que tenga en la Callback URLconfiguración, siempre que haya un valor allí.

MrMakeIt
fuente
1

Luché con esto y seguí una docena de soluciones, al final todo lo que tuve que hacer para trabajar con cualquier API ssl en el host local fue:

Ir a descargar: archivo cacert.pem

En php.ini* descomentar y cambiar: curl.cainfo = "c:/wamp/bin/php/php5.5.12/cacert.pem"

  • Puede encontrar dónde está su php.iniarchivo en su máquina ejecutandophp --ini en su CLI
  • Coloqué mi cacert.pem en el mismo directorio que php.ini para mayor facilidad.
Luis
fuente
1

Estos son los pasos que me funcionaron para que Facebook funcione con una aplicación local en mi computadora portátil:

  • ir a apps.twitter.com
  • ingrese el nombre, la descripción de la aplicación y la URL de su sitio Nota: para localhost: 8000, use 127.0.0.1:8000 ya que el primero no funcionará
  • ingrese la URL de devolución de llamada que coincida con su URL de devolución de llamada definida en TWITTER_REDIRECT_URI su aplicación Nota: por ejemplo: http://127.0.0.1/login/twitter/callback (localhost no funcionará).
  • Importante introduzca las URL de la "política de privacidad" y las "condiciones de uso" si desea solicitar la dirección de correo electrónico del usuario.
  • marque la casilla de verificación de aceptar términos
  • haga clic en [Crear su aplicación de Twitter]
  • cambie a la pestaña [Llaves y tokens de acceso] en la parte superior
  • copie la "Clave del consumidor (clave API)" y el "Secreto del consumidor (secreto API)" en TWITTER_KEY y TWITTER_SECRET en su aplicación
  • haga clic en la pestaña "Permisos" y establezca apropiadamente en "solo lectura", "lectura y escritura" o "lectura, escritura y mensaje directo" (use la opción menos intrusiva necesaria para su aplicación, ya que solo y el inicio de sesión de OAuth es "solo lectura" suficiente
  • En "Permisos adicionales", marque la casilla de verificación "solicitar direcciones de correo electrónico a los usuarios" si desea que la dirección de correo electrónico del usuario se devuelva a los datos de inicio de sesión de OAuth (en la mayoría de los casos, marque sí)
Kmeixner
fuente