Twitter oAuth callbackUrl - pengembangan localhost

112

Apakah ada orang lain yang kesulitan mendapatkan URL panggilan balik Twitters oAuth untuk memasuki lingkungan pengembangan localhost mereka. Rupanya itu telah dinonaktifkan baru-baru ini. http://code.google.com/p/twitter-api/issues/detail?id=534#c1

Apakah ada yang punya solusi. Saya tidak benar-benar ingin menghentikan perkembangan saya


sumber
Ini berfungsi untuk saya dengan mengatur url panggilan balik twitter ke url situs web asli saya. Saat menguji di localhost -> pendaftaran twitter, dialihkan ke localhost (bukan url situs web).
Sudhakar Krishnan

Jawaban:

135

Alternatif 1.

Siapkan file .hosts (Windows) atau etc / hosts Anda untuk mengarahkan domain langsung ke IP localhost Anda. seperti:

127.0.0.1 xyz.com

dengan xyz.com adalah domain Anda yang sebenarnya.

Alternatif 2.

Selain itu, artikel tersebut memberikan tip untuk alternatif menggunakan layanan penyingkat URL. Persingkat URL lokal Anda dan berikan hasilnya sebagai callback.

Alternatif 3.

Selain itu, tampaknya berfungsi untuk menyediakan misalnya http://127.0.0.1:8080sebagai panggilan balik ke Twitter, bukan http://localhost:8080.

Tony
sumber
3
Mungkinkah ini menyebabkan kesalahan berikut: Server jarak jauh mengembalikan kesalahan: (401) Tidak sah?
DevDave
Bagaimana cara kerja localhost ketika tidak ada terowongan ke sana? Itu tidak benar-benar mengenai mesin lokal Anda?
Jack Tuck
@JackTuck Callback dipanggil oleh browser pengguna, bukan oleh server Twitter.
berbulu halus
25

Saya harus melakukan ini minggu lalu. Rupanya localhosttidak berhasil tetapi tidak bekerja 127.0.0.1.

Ini tentu saja mengasumsikan bahwa Anda mendaftarkan dua aplikasi dengan Twitter, satu untuk siaran langsung Anda www.mysite.comdan satu lagi untuk 127.0.0.1.

Adam
sumber
8

Ya, ini dinonaktifkan karena masalah keamanan baru-baru ini yang ditemukan di OAuth. Satu-satunya solusi untuk saat ini adalah membuat dua aplikasi OAuth - satu untuk produksi dan satu lagi untuk pengembangan. Dalam aplikasi pengembangan, Anda menyetel URL panggilan balik localhost Anda, bukan yang langsung.

arikfr
sumber
Saya baru saja mencoba melakukan itu, tetapi tidak menerima localhost: 3000 sebagai format URL ...
David N. Welton
1
Ya, tampaknya mereka memfilter URL semacam itu. :( Tetapi dukungan untuk url panggilan balik khusus sudah kembali - mungkin didukung di sana.
arikfr
8

URL panggilan balik diedit

http://localhost:8585/logintwitter.aspx

Ubah ke

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

Beginilah cara saya melakukannya:

URL Panggilan Balik Terdaftar: 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>

Pastikan Anda menyetel properti 'gunakan port dinamis' dari proyek Anda ke 'false' dan masukkan nomor port statis sebagai gantinya. (Saya menggunakan 1066).

Saya harap ini membantu!

ThdK
sumber
7

Gunakan http://smackaho.st

Apa yang dilakukannya adalah asosiasi DNS sederhana ke 127.0.0.1 yang memungkinkan Anda melewati filter di localhost atau 127.0.0.1:

smackaho.st. 28800 DALAM 127.0.0.1

Jadi jika Anda mengklik tautannya, itu akan menampilkan apa yang Anda miliki di server web lokal Anda (dan jika Anda tidak memilikinya, Anda akan mendapatkan 404). Anda tentu saja dapat mengaturnya ke halaman / port manapun yang Anda inginkan:

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

Massa
sumber
6
smackaho.st tidak lagi tersedia tbaggery.com/2010/03/04/smack-a-ho-st.html . Gunakan lvh.me sebagai gantinya. Ini masuk langsung ke localhost.
Justin
5

Saya bekerja dengan url panggilan balik Twitter di localhost saya. Jika Anda tidak yakin bagaimana membuat virtual host (ini penting) gunakan Ampps. Dia sangat keren dan mudah. Dalam beberapa langkah Anda memiliki host virtual Anda sendiri dan kemudian setiap url akan berfungsi. Sebagai contoh:

  1. unduh dan pasang ampps

  2. Tambahkan domain baru. (di sini Anda dapat mengatur misalnya twitter.local) itu berarti host virtual Anda akan menjadi http: //twitter.local dan akan berfungsi setelah langkah 3.

  3. Saya sedang mengerjakan Win, jadi buka file host Anda -> C: \ Windows \ System32 \ Drivers \ etc \ hosts dan tambahkan baris: 127.0.0.1 twitter.local

Mulai ulang Ampps Anda dan Anda dapat menggunakan panggilan balik Anda. Anda dapat menentukan url apa pun, bahkan jika Anda menggunakan beberapa kerangka kerja MVC atau Anda memiliki penulisan ulang url htaccess.

Semoga Bantuan Ini! Bersulang.

Glibo
sumber
Terima kasih atas tipnya. Di linux, cukup tambahkan nama domain pengembangan ke / etc / hosts
jeremyvillalobos
3

Ketika saya mengembangkan secara lokal, saya selalu menyiapkan nama pengembang yang dihosting secara lokal yang mencerminkan proyek yang saya kerjakan. Saya mengatur ini di xampp melalui xampp \ apache \ conf \ extra \ httpd-vhosts.conf dan kemudian juga di \ Windows \ System32 \ drivers \ etc \ hosts.

Jadi jika saya menyiapkan situs pengembang lokal untuk example.com, saya akan menyiapkannya sebagai example.dev di dua file tersebut.

Jawaban Singkat: Setelah ini diatur dengan benar, Anda dapat memperlakukan url ini ( http://example.dev ) seolah-olah itu hidup (bukan lokal) saat Anda mengatur Aplikasi Twitter Anda.

Jawaban serupa diberikan di sini: https://dev.twitter.com/discussions/5749

Kutipan Langsung (penekanan ditambahkan):

Anda dapat memberikan URL valid apa pun dengan nama domain yang kami kenali di halaman detail aplikasi. OAuth 1.0a mengharuskan Anda untuk mengirim nilai oauth_callback pada langkah token permintaan aliran dan kami akan menerima panggilan balik berbasis locahost dinamis pada langkah itu .

Ini bekerja seperti pesona bagi saya. Semoga ini membantu.

Joe Bergevin
sumber
3

Ini dapat dilakukan dengan sangat nyaman dengan Fiddler :

  • Buka menu Tools> HOSTS ...
  • Sisipkan baris seperti 127.0.0.1 your-production-domain.com, pastikan bahwa "Aktifkan pemetaan ulang permintaan ..." dicentang. Jangan lupa tekan Save.
  • Jika akses ke server produksi Anda yang sebenarnya diperlukan, cukup keluar dari Fiddler atau nonaktifkan pemetaan ulang.
  • Memulai Fiddler lagi akan mengaktifkan pemetaan ulang (jika dicentang).

Bonus yang menyenangkan adalah Anda dapat menentukan port khusus, seperti ini: 127.0.0.1:3000 your-production-domain.com(tidak mungkin mencapai ini melalui file host). Selain itu, selain IP Anda dapat menggunakan nama domain apa pun (misalnya localhost).

Dengan cara ini, dimungkinkan (tetapi tidak perlu) untuk mendaftarkan aplikasi Twitter Anda hanya sekali (asalkan Anda tidak keberatan menggunakan kunci yang sama untuk pengembangan dan produksi lokal).

Roman Boiko
sumber
2

edit fungsi ini di TwitterAPIExchange.php di baris # 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; }
}
Pembantu
sumber
Anda dapat mengunduh TwitterAPIExchange.php dari sini github.com/J7mbo/twitter-api-php
Helper
2

Saya memiliki tantangan yang sama dan saya tidak dapat memberikan localhost sebagai URL panggilan balik yang valid. Jadi saya membuat domain sederhana untuk membantu kami sebagai pengembang: https://tolocalhost.com

Ini akan mengarahkan jalur apa pun ke domain dan port localhost Anda yang Anda butuhkan. Semoga bisa bermanfaat bagi developer lain.

Jørgen
sumber
Sumber daya yang luar biasa, Namun domain Anda menambahkan "/" ke akhir url yang mengarah ke 404 pada beberapa kesempatan. bisakah kamu memperbaikinya? Misalnya itu dialihkan sebagai "localhost / somename /? <response>, tetapi harus" localhost / somename? <response>
Channa
@ Channa Saya mencoba mereproduksi ini tetapi tampaknya skrip berfungsi dengan benar. Browser apa yang Anda gunakan? Saya mencoba Chrome, Safari, Firefox dan berfungsi seperti yang diharapkan.
Jørgen
Itu terjadi pada saya di Chrome dan Firefox. Ini adalah nama host yang saya masukkan ke halaman Anda " localhost: 8080 / dashboard / twitterRedirect.jsp " Tetapi ketika dialihkan, ia pergi ke " localhost: 8080 / dashboard / twitterRedirect.jsp /… " Harap perhatikan simbol "/" sebelum pertanyaan menandai. Ini akan menyebabkan aplikasi saya mengirimi saya 404
Channa
1
@Channa Anda tidak boleh meletakkan seluruh URL di bidang nama host. Ini disebut: nama host, bukan URL ;-) Idenya adalah untuk dapat menimpa 'localhost' menjadi sesuatu seperti: my.localhost.bla kemudian akan menggunakannya sebagai pengganti localhost. Dalam kasus Anda, bidang host harus localhost. Anda menyetel port ke 8080 dan mengonfigurasi pengalihan ke: tolocalhost.com/dashboard/twitterRedirect.jsp ini akan dialihkan ke: localhost: 8080 / dashboard / twitterRedirect.jsp
Jørgen
2

Sepertinya saat ini http://127.0.0.1juga berhenti bekerja. Solusi sederhana adalah dengan menggunakan http://localtest.mealih-alih http://localhostselalu mengarah ke 127.0.0.1Dan Anda bahkan dapat menambahkan subdomain sembarang ke dalamnya, dan itu akan tetap mengarah ke127.0.0.1

Lihat Website

Aron Einhorn
sumber
1

setel callbackurl di aplikasi twitter: 127.0.0.1:3000 dan setel WEBrick untuk mengikat 127.0.0.1 bukan 0.0.0.0

perintah: rails s -b 127.0.0.1

Alok Yadav
sumber
1

Sepertinya Twitter sekarang mengizinkan localhostapa pun yang Anda miliki di Callback URLpengaturan, selama ada nilainya di sana.

MrMakeIt
sumber
1

Saya berjuang dengan ini dan mengikuti selusin solusi, pada akhirnya yang harus saya lakukan untuk bekerja dengan apis ssl di host lokal adalah:

Pergi unduh: file cacert.pem

Di php.ini* hapus komentar dan ubah: curl.cainfo = "c:/wamp/bin/php/php5.5.12/cacert.pem"

  • Anda dapat menemukan di mana php.inifile Anda berada di mesin Anda dengan menjalankan php --iniCLI Anda
  • Saya menempatkan cacert.pem saya di direktori yang sama dengan php.ini untuk kemudahan.
Lewis
sumber
1

Ini adalah langkah-langkah yang berhasil bagi saya untuk membuat Facebook berfungsi dengan aplikasi lokal di laptop saya:

  • buka apps.twitter.com
  • masukkan nama, deskripsi aplikasi dan URL situs Anda Catatan: untuk localhost: 8000, gunakan 127.0.0.1:8000 karena yang pertama tidak akan berfungsi
  • masukkan URL panggilan balik yang cocok dengan URL panggilan balik Anda yang ditentukan dalam TWITTER_REDIRECT_URI aplikasi Anda Catatan: misalnya: http://127.0.0.1/login/twitter/callback (localhost tidak akan berfungsi).
  • Penting untuk memasukkan URL "kebijakan privasi" dan "persyaratan penggunaan" jika Anda ingin meminta alamat email pengguna
  • centang kotak setuju dengan persyaratan
  • klik [Buat Aplikasi Twitter Anda]
  • beralih ke tab [Keys and Access Tokens] di bagian atas
  • salin "Kunci Konsumen (Kunci API)" dan "Rahasia Konsumen (Rahasia API)" ke TWITTER_KEY dan TWITTER_SECRET di aplikasi Anda
  • klik tab "Izin" dan setel dengan tepat ke "hanya baca", "baca dan tulis" atau "baca, tulis, dan pesan langsung" (gunakan opsi yang paling tidak mengganggu yang diperlukan untuk aplikasi Anda, karena info masuk hanya dan OAuth "hanya baca" adalah cukup
  • Di bawah "Izin Tambahan", centang kotak "minta alamat email dari pengguna" jika Anda ingin alamat email pengguna dikembalikan ke data login OAuth (biasanya centang ya)
Kmeixner
sumber