Twitter oAuth callbackUrl - desenvolvimento localhost

112

Alguém está tendo dificuldade em fazer o URL de retorno de chamada do Twitters oAuth atingir seu ambiente de desenvolvimento de host local? Aparentemente, ele foi desativado recentemente. http://code.google.com/p/twitter-api/issues/detail?id=534#c1

Alguém tem uma solução alternativa. Eu realmente não quero parar meu desenvolvimento


fonte
Funcionou para mim, definindo o URL de retorno de chamada do Twitter para o url do meu site real. Durante o teste em localhost -> inscrição no Twitter, redirecionado para localhost (em vez do url do site).
Sudhakar Krishnan

Respostas:

135

Alternativa 1.

Configure seu arquivo .hosts (Windows) ou etc / hosts para apontar um domínio ativo para o IP do seu host local. tal como:

127.0.0.1 xyz.com

onde xyz.com é o seu domínio real.

Alternativa 2.

Além disso, o artigo dá a dica para usar alternativamente um serviço de encurtador de URL. Reduza o URL local e forneça o resultado como retorno de chamada.

Alternativa 3.

Além disso, parece que funciona para fornecer, por exemplo, http://127.0.0.1:8080como retorno de chamada para o Twitter, em vez de http://localhost:8080.

Tony
fonte
3
Isso pode estar causando o seguinte erro: O servidor remoto retornou um erro: (401) Não autorizado?
DevDave 01 de
Como o localhost funciona quando não há túnel para ele? Ele realmente não atinge sua máquina local?
Jack Tuck
@JackTuck O retorno de chamada é chamado pelo navegador do usuário, não pelos servidores do Twitter.
fofo de
25

Eu só tive que fazer isso na semana passada. Aparentemente localhostnão funciona, mas 127.0.0.1vai entender.

É claro que isso pressupõe que você está registrando dois aplicativos no Twitter, um para o seu live www.mysite.come outro para 127.0.0.1.

Adão
fonte
8

Sim, ele foi desativado devido ao problema de segurança recente encontrado no OAuth. A única solução por enquanto é criar dois aplicativos OAuth - um para produção e outro para desenvolvimento. No aplicativo de desenvolvimento, você define a URL de retorno de chamada do host local em vez da URL ao vivo.

Arikfr
fonte
Acabei de tentar fazer isso, mas não aceita localhost: 3000 como formato de URL ...
David N. Welton
1
Sim, eles parecem filtrar tais URLs. :( Mas o suporte para URLs de retorno de chamada personalizados está de volta - talvez eles tenham suporte lá.
arikfr
8

URL de retorno editado

http://localhost:8585/logintwitter.aspx

Converter para

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

Foi assim que eu fiz:

URL de retorno de chamada registrado: 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>

Certifique-se de definir a propriedade 'usar portas dinâmicas' do seu projeto como 'falso' e, em vez disso, insira um número de porta estática. (Eu usei 1066).

Eu espero que isso ajude!

ThdK
fonte
7

Use http://smackaho.st

O que ele faz é uma associação DNS simples para 127.0.0.1, que permite que você ignore os filtros no host local ou 127.0.0.1:

smackaho.st. 28800 IN A 127.0.0.1

Portanto, se você clicar no link, ele exibirá o que você tem em seu servidor da web local (e se você não tiver um, receberá um 404). Você pode, é claro, configurá-lo para qualquer página / porta que desejar:

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

Turba
fonte
6
smackaho.st não está mais disponível tbaggery.com/2010/03/04/smack-a-ho-st.html . Em vez disso, use lvh.me. Ele vai diretamente para o localhost.
Justin
5

Eu estava trabalhando com o URL de retorno de chamada do Twitter em meu host local. Se você não tiver certeza de como criar um host virtual (isso é importante), use Ampps. Ele é muito legal e fácil. Em algumas etapas, você terá seu próprio host virtual e, em seguida, cada url funcionará nele. Por exemplo:

  1. baixar e instalar ampps

  2. Adicione um novo domínio. (aqui você pode definir, por exemplo, twitter.local), o que significa que seu host virtual será http: //twitter.local e funcionará após a etapa 3.

  3. Estou trabalhando no Win, então vá em seu arquivo host -> C: \ Windows \ System32 \ Drivers \ etc \ hosts e adicione a linha: 127.0.0.1 twitter.local

Reinicie seus Ampps e você pode usar o retorno de chamada. Você pode especificar qualquer url, mesmo se estiver usando algum framework MVC ou se tiver reescrito de url do htaccess.

Espero que ajude! Felicidades.

Glibo
fonte
Obrigado pela dica. No Linux, basta adicionar o nome do domínio de desenvolvimento em / etc / hosts
jeremyvillalobos
3

Quando desenvolvo localmente, sempre configuro um nome de desenvolvedor hospedado localmente que reflete o projeto no qual estou trabalhando. Eu configurei isso no xampp por meio de xampp \ apache \ conf \ extra \ httpd-vhosts.conf e também em \ Windows \ System32 \ drivers \ etc \ hosts.

Portanto, se eu estiver configurando um site dev local para example.com, eu configuraria como example.dev nesses dois arquivos.

Resposta curta: Depois de configurado corretamente, você pode simplesmente tratar este url ( http://example.dev ) como se fosse ao vivo (em vez de local) enquanto configura seu aplicativo do Twitter.

Uma resposta semelhante foi dada aqui: https://dev.twitter.com/discussions/5749

Citação direta (ênfase adicionada):

Você pode fornecer qualquer URL válido com um nome de domínio que reconhecemos na página de detalhes do aplicativo. OAuth 1.0a requer que você envie um valor oauth_callback na etapa do token de solicitação do fluxo e aceitaremos um retorno de chamada baseado em locahost dinâmico nessa etapa .

Isso funcionou como um encanto para mim. Espero que isto ajude.

Joe Bergevin
fonte
3

Isso pode ser feito de forma muito conveniente com o Fiddler :

  • Abra o menu Ferramentas> HOSTS ...
  • Insira uma linha como 127.0.0.1 your-production-domain.com, certifique-se de que "Ativar remapeamento de solicitações ..." esteja marcado. Não se esqueça de pressionar Save.
  • Se o acesso ao seu servidor de produção real for necessário, simplesmente saia do Fiddler ou desative o remapeamento.
  • Iniciar o Fiddler novamente ativará o remapeamento (se estiver marcado).

Um bônus agradável é que você pode especificar uma porta personalizada, como esta: 127.0.0.1:3000 your-production-domain.com(seria impossível fazer isso através do arquivo hosts). Além disso, em vez de IP, você pode usar qualquer nome de domínio (por exemplo, localhost).

Dessa forma, é possível (mas não necessário) registrar seu aplicativo Twitter apenas uma vez (desde que você não se importe de usar as mesmas chaves para desenvolvimento e produção local).

Roman Boiko
fonte
2

edite esta função no TwitterAPIExchange.php na linha # 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; }
}
Ajudante
fonte
Você pode baixar TwitterAPIExchange.php aqui github.com/J7mbo/twitter-api-php
Helper
2

Eu tive o mesmo desafio e não consegui fornecer localhost como um URL de retorno de chamada válido. Então eu criei um domínio simples para ajudar os desenvolvedores: https://tolocalhost.com

Ele redirecionará qualquer caminho para o domínio de host local e a porta de que você precisa. Espero que possa ser útil para outros desenvolvedores.

Jørgen
fonte
Excelente recurso, mas seu domínio adiciona "/" ao final do url, o que leva a 404 em algumas ocasiões. você poderia consertar isso? Por exemplo, ele redireciona como "localhost / somename /? <response>, mas deveria ser" localhost / somename? <response>
Channa
@Channa tentei reproduzir isso mas parece que o script funciona corretamente. Qual navegador você está usando? Experimentei Chrome, Safari, Firefox e funciona como esperado.
Jørgen
Isso acontece comigo no Chrome e no Firefox. Este é o nome do host que coloquei na sua página " localhost: 8080 / dashboard / twitterRedirect.jsp " Mas quando ele redireciona vai para " localhost: 8080 / dashboard / twitterRedirect.jsp /… " Observe o símbolo "/" antes da pergunta marca. Isso fará com que meu aplicativo me envie 404
Channa
1
@Channa você não deve colocar a URL inteira no campo do nome do host. Chama-se: hostname, não URL ;-) A ideia é poder sobrescrever 'localhost' para algo como: my.localhost.bla então usará isso em vez de localhost. No seu caso, o campo host precisa ser localhost. Você define a porta para 8080 e configura o redirecionamento para ir para: tolocalhost.com/dashboard/twitterRedirect.jsp, isso redirecionará para: localhost: 8080 / dashboard / twitterRedirect.jsp
Jørgen
2

Parece que hoje em dia http://127.0.0.1também parou de funcionar. Uma solução simples é usar em http://localtest.mevez de http://localhostsempre apontar para 127.0.0.1E você pode até adicionar qualquer subdomínio arbitrário a ele, e ele ainda apontará para127.0.0.1

Veja o site

Aron Einhorn
fonte
1

definir callbackurl no aplicativo do Twitter: 127.0.0.1:3000 e definir WEBrick para vincular em 127.0.0.1 em vez de 0.0.0.0

comando: rails s -b 127.0.0.1

Alok Yadav
fonte
1

Parece que o Twitter agora permite localhosto que quer que você tenha nas Callback URLconfigurações, desde que haja um valor ali.

MrMakeIt
fonte
1

Lutei com isso e segui uma dúzia de soluções, no final tudo o que tive que fazer para trabalhar com qualquer API SSL no host local foi:

Faça o download: arquivo cacert.pem

Em php.ini* descomentar e alterar: curl.cainfo = "c:/wamp/bin/php/php5.5.12/cacert.pem"

  • Você pode encontrar onde seu php.iniarquivo está em sua máquina executando php --iniem seu CLI
  • Coloquei meu cacert.pem no mesmo diretório que php.ini para facilitar.
Lewis
fonte
1

Estas são as etapas que funcionaram para que o Facebook funcionasse com um aplicativo local no meu laptop:

  • goto apps.twitter.com
  • insira o nome, a descrição do aplicativo e o URL do seu site Observação: para localhost: 8000, use 127.0.0.1:8000, pois o anterior não funcionará
  • insira o URL de retorno correspondente ao seu URL de retorno definido em TWITTER_REDIRECT_URI seu aplicativo Nota: por exemplo: http://127.0.0.1/login/twitter/callback (localhost não funcionará).
  • Importante, insira os URLs da "política de privacidade" e dos "termos de uso" se desejar solicitar o endereço de e-mail do usuário
  • marque a caixa de seleção concordar com os termos
  • clique em [Create Your Twitter Application]
  • mude para a guia [Chaves e tokens de acesso] na parte superior
  • copie a "Chave do consumidor (chave da API)" e o "Segredo do consumidor (chave da API)" para TWITTER_KEY e TWITTER_SECRET em seu aplicativo
  • clique na guia "Permissões" e defina apropriadamente como "somente leitura", "leitura e gravação" ou "leitura, gravação e mensagem direta" (use a opção menos intrusiva necessária para o seu aplicativo, para login apenas e OAuth "somente leitura" suficiente
  • Em "Permissões adicionais", marque a caixa de seleção "solicitar endereços de e-mail dos usuários" se desejar que o endereço de e-mail do usuário seja retornado aos dados de login OAuth (na maioria dos casos, marque sim)
Kmeixner
fonte