Twitter oAuth callbackUrl - การพัฒนา localhost


112

มีใครอีกบ้างที่มีช่วงเวลาที่ยากลำบากในการทำให้ URL เรียกกลับของ Twitters oAuth เข้าสู่สภาพแวดล้อมการพัฒนา localhost เห็นได้ชัดว่าเพิ่งถูกปิดใช้งานเมื่อเร็ว ๆ นี้ http://code.google.com/p/twitter-api/issues/detail?id=534#c1

ใครมีวิธีแก้ปัญหา ฉันไม่อยากหยุดพัฒนาตัวเองเลยจริงๆ


มันใช้ได้ผลสำหรับฉันโดยการตั้งค่า twitter callback url เป็น url เว็บไซต์จริงของฉัน ขณะทดสอบใน localhost -> สมัครใช้งาน twitter เปลี่ยนเส้นทางไปยัง localhost (แทน URL ของเว็บไซต์)
Sudhakar Krishnan

คำตอบ:


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) Unauthorized?
DevDave

localhost ทำงานอย่างไรเมื่อไม่มีช่องสัญญาณ มันไม่โดนเครื่องของคุณจริงเหรอ?
Jack Tuck

@JackTuck การโทรกลับถูกเรียกโดยเบราว์เซอร์ของผู้ใช้ไม่ใช่เซิร์ฟเวอร์ของ Twitter
ปุย

25

ฉันเพิ่งจะทำเมื่อสัปดาห์ที่แล้ว เห็นได้ชัดว่าlocalhostใช้งานไม่ได้ แต่ไป127.0.0.1คิด

หลักสูตรนี้อนุมานว่าคุณจะลงทะเบียนสองปพลิเคชันที่มีทวิตเตอร์หนึ่งสำหรับชีวิตของคุณwww.mysite.comและอื่น ๆ 127.0.0.1สำหรับ



8

ใช่มันถูกปิดใช้งานเนื่องจากปัญหาด้านความปลอดภัยล่าสุดที่พบใน OAuth ทางออกเดียวในตอนนี้คือการสร้างแอปพลิเคชัน OAuth สองแอปพลิเคชันหนึ่งรายการสำหรับการใช้งานจริงและอีกหนึ่งรายการสำหรับการพัฒนา ในแอปพลิเคชันการพัฒนาคุณตั้งค่า URL เรียกกลับ localhost แทน URL ที่ใช้งานจริง


ฉันเพิ่งลองทำเช่นนั้น แต่ไม่ยอมรับlocalhost: 3000เป็นรูปแบบ URL ...
David N. Welton

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");

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>

ตรวจสอบให้แน่ใจว่าคุณตั้งค่าคุณสมบัติ "ใช้พอร์ตไดนามิก" ของโปรเจ็กต์ของคุณเป็น "เท็จ" และป้อนหมายเลขพอร์ตแบบคงที่แทน (ฉันใช้ 1066)

ฉันหวังว่านี่จะช่วยได้!


7

ใช้http://smackaho.st

สิ่งที่ทำคือการเชื่อมโยง DNS อย่างง่ายกับ 127.0.0.1 ซึ่งช่วยให้คุณสามารถข้ามตัวกรองบน ​​localhost หรือ 127.0.0.1:

smackaho.st 28800 ใน 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 บน localhost ของฉัน หากคุณไม่แน่ใจว่าจะสร้างโฮสต์เสมือนอย่างไร (สิ่งนี้สำคัญ) ให้ใช้ Ampps เขาเจ๋งและง่ายมาก ในไม่กี่ขั้นตอนคุณจะมีโฮสต์เสมือนของคุณเองจากนั้นทุก url จะทำงานได้ ตัวอย่างเช่น:

  1. ดาวน์โหลดและติดตั้งแอมป์

  2. เพิ่มโดเมนใหม่ (ที่นี่คุณสามารถตั้งค่าได้เช่น twitter.local) นั่นหมายความว่าโฮสต์เสมือนของคุณจะเป็นhttp: //twitter.localและจะทำงานหลังจากขั้นตอนที่ 3

  3. ฉันกำลังทำงานกับ Win ดังนั้นไปที่ไฟล์โฮสต์ของคุณ -> C: \ Windows \ System32 \ Drivers \ etc \ hosts และเพิ่มบรรทัด: 127.0.0.1 twitter.local

รีสตาร์ท Ampps ของคุณและคุณสามารถใช้การโทรกลับของคุณ คุณสามารถระบุ url ใดก็ได้แม้ว่าคุณจะใช้เฟรมเวิร์ก MVC หรือคุณมีการเขียน htaccess url ใหม่

หวังว่านี่จะช่วยได้! ไชโย


ขอบคุณสำหรับทิป. บน linux เพียงแค่เพิ่มชื่อโดเมนการพัฒนาไปที่ / etc / hosts
jeremyvillalobos

3

เมื่อฉันพัฒนาในพื้นที่ฉันมักจะตั้งชื่อนักพัฒนาที่โฮสต์ในพื้นที่ซึ่งแสดงถึงโครงการที่ฉันกำลังดำเนินการอยู่ ฉันตั้งค่านี้ใน xampp ผ่าน xampp \ apache \ conf \ extra \ httpd-vhosts.conf จากนั้นใน \ Windows \ System32 \ drivers \ etc \ hosts

ดังนั้นถ้าฉันกำลังตั้งค่าไซต์ dev ในเครื่องสำหรับ 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(คงเป็นไปไม่ได้ที่จะทำผ่านไฟล์โฮสต์) นอกจากนี้แทนที่จะใช้ 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

@ Channa ฉันพยายามทำซ้ำสิ่งนี้ แต่ดูเหมือนว่าสคริปต์จะทำงานได้อย่างถูกต้อง สิ่งที่เบราว์เซอร์ที่คุณใช้? ฉันลองใช้ Chrome, Safari, Firefox และใช้งานได้ตามที่คาดไว้
Jørgen

เกิดขึ้นกับฉันทั้งใน Chrome และ Firefox นี่คือชื่อโฮสต์ที่ฉันใส่ในเพจของคุณ " localhost: 8080 / dashboard / twitterRedirect.jsp " แต่เมื่อมันเปลี่ยนเส้นทางมันจะไปที่ " localhost: 8080 / dashboard / twitterRedirect.jsp / … " โปรดสังเกตสัญลักษณ์ "/" ก่อนคำถาม เครื่องหมาย. มันจะทำให้แอปของฉันส่ง 404
Channa

1
@ Channa คุณไม่ควรใส่ URL ทั้งหมดในช่องชื่อโฮสต์ เรียกว่า: ชื่อโฮสต์ไม่ใช่ 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

คำสั่ง: ราง s -b 127.0.0.1


1

ดูเหมือนว่า Twitter จะอนุญาตlocalhostควบคู่ไปกับสิ่งที่คุณมีในการCallback URLตั้งค่าตราบใดที่ยังมีค่าอยู่


1

ฉันต่อสู้กับสิ่งนี้และทำตามวิธีแก้ปัญหาโหลในที่สุดสิ่งที่ฉันต้องทำเพื่อทำงานกับ ssl apis ใด ๆ บนโฮสต์ท้องถิ่นคือ:

ไปดาวน์โหลด: ไฟล์ cacert.pem

ในphp.ini* ยกเลิกการแสดงความคิดเห็นและการเปลี่ยนแปลง: curl.cainfo = "c:/wamp/bin/php/php5.5.12/cacert.pem"

  • คุณสามารถค้นหาว่าphp.iniไฟล์ของคุณอยู่ที่ใดบนเครื่องของคุณโดยการเรียกใช้php --iniใน CLI ของคุณ
  • ฉันวาง 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]
  • สลับไปที่แท็บ [Keys and Access Tokens] ที่ด้านบน
  • คัดลอก "Consumer Key (API Key)" และ "Consumer Secret (API Secret)" ไปที่ TWITTER_KEY และ TWITTER_SECRET ในแอปพลิเคชันของคุณ
  • คลิกแท็บ "สิทธิ์" และตั้งค่าให้เหมาะสมเป็น "อ่านอย่างเดียว" "อ่านและเขียน" หรือ "อ่านเขียนและส่งข้อความโดยตรง" (ใช้ตัวเลือกที่รบกวนน้อยที่สุดที่จำเป็นสำหรับแอปพลิเคชันของคุณสำหรับการเข้าสู่ระบบ OAuth "อ่านอย่างเดียว" คือ เพียงพอ
  • ภายใต้ "สิทธิ์เพิ่มเติม" ให้เลือกช่องทำเครื่องหมาย "ขอที่อยู่อีเมลจากผู้ใช้" หากคุณต้องการให้ที่อยู่อีเมลของผู้ใช้คืนกลับไปยังข้อมูลการเข้าสู่ระบบ OAuth (ในกรณีส่วนใหญ่ให้เลือกใช่)
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.