ข้อผิดพลาด 404 พยายามใช้ผู้ใช้ทดสอบ Facebook login_url

หากฉันสร้าง ผู้ใช้ทดสอบ Facebook, login_url สำหรับผู้ใช้ใหม่ไม่ทำงาน การดึงข้อมูล login_url ส่งคืนข้อผิดพลาด 404

ตัวอย่างการตัดทอน (ใน Python) สองบรรทัดสุดท้ายคือจุดที่ปัญหาปรากฏขึ้น:

import requests
from urlparse import parse_qs
APP_ID = "<Facebook App ID>"
APP_SECRET = "<Facebook Client Secret>"

# Get app access token - this works
response = requests.get('https://graph.facebook.com/oauth/access_token',
                        params={'grant_type': "client_credentials",
                                'client_id': APP_ID, 'client_secret': APP_SECRET})
app_access_token = parse_qs(response.content)['access_token'][0]

# Create test user - this works
response = requests.post('https://graph.facebook.com/%s/accounts/test-users' % APP_ID,
                         data={'access_token': app_access_token, 'installed': "true"})
test_user = response.json()
login_url = test_user['login_url']
print login_url  # http://developers.facebook.com/checkpoint/test-user-login/...

# Get cookied for login - see https://stackoverflow.com/a/5370869/647002
session = requests.Session()
session.get("https://www.facebook.com/", allow_redirects=True)

# Login test user - THIS FAILS
response = session.get(login_url)
print response.status_code  # 404

คนอื่น ๆ ได้ตั้งข้อสังเกตว่าคุณต้อง ก่อนอื่นให้ดึงข้อมูลหน้าแรกของ Facebook ก่อนที่ login_url ของผู้ใช้ทดสอบจะทำงาน เราประสบปัญหาเดียวกันนั้น และฉันได้รวมวิธีแก้ปัญหาข้างต้นไว้แล้วโดยไม่มีโชคเลย [แก้ไข: เพิ่มพารามิเตอร์ข้อความค้นหา _fb_noscript=1 ซึ่งจำเป็นตั้งแต่กลางปี ​​​​2558 สำหรับไคลเอนต์ทดสอบที่ไม่ใช่ JavaScript] [แก้ไข 8/2017: ตอนนี้ถูกลบแล้ว _fb_noscript=1; ไม่จำเป็นอีกต่อไป และตั้งค่าคุกกี้ noscript ที่ทำให้คำขอตรวจสอบสิทธิ์ FB ในภายหลังส่งคืน 500]

ฉันยังลองเปิด login_url โดยตรงในเบราว์เซอร์:

  • หากฉัน ไม่ได้ เข้าสู่ระบบ Facebook ฉันจะได้รับเพจ Facebook 404 ทั่วไป
  • หากฉันเข้าสู่ระบบบัญชีนักพัฒนาของฉันแล้ว Facebook จะเตือนว่าฉันจะเข้าสู่ระบบในฐานะผู้ใช้ทดสอบแพลตฟอร์ม จากนั้นจึงอนุญาตให้ฉันเข้าสู่บัญชีของผู้ใช้ทดสอบได้

จุดสุดท้ายนั้นดูเหมือนจะยืนยันว่าผู้ใช้ทดสอบถูกสร้างขึ้นอย่างถูกต้องและฉันมี login_url ที่ถูกต้อง แต่แน่นอนว่านั่นไม่ช่วยอะไรสำหรับการทดสอบอัตโนมัติ (เราไม่ต้องการทำการทดสอบโดยลงชื่อเข้าใช้บัญชีนักพัฒนาซอฟต์แวร์ของฉัน)

มีวิธีอื่นใดอีกไหมที่ login_url ของผู้ใช้ทดสอบจะใช้สำหรับการทดสอบอัตโนมัติ


person medmunds    schedule 22.03.2014    source แหล่งที่มา
comment
ฉันไม่มีความรู้วงใน แต่ฉันสงสัยว่าอาจมีบางอย่างผิดปกติกับระบบผู้ใช้ทดสอบของ Facebook ในขณะนี้หรือไม่ วันนี้ฉันสังเกตเห็นปัญหาที่คล้ายกันกับ URL สำหรับเข้าสู่ระบบ และฉันก็พบปัญหาเป็นระยะๆ ด้วย เกิดข้อผิดพลาดที่ไม่ทราบสาเหตุ OAuthExceptions เมื่อสร้างผู้ใช้ทดสอบ เมื่อต้นเดือนที่ผ่านมา Facebook ยืนยันปัญหากับผู้ใช้ทดสอบที่โพสต์ไปยังเพจ: developers.facebook.com/bugs/521644354623048   -  person David Sickmiller    schedule 27.03.2014
comment
ขอบคุณสำหรับตัวชี้ ตามทฤษฎีแล้ว มีปัญหาในระบบผู้ใช้ทดสอบของ Facebook ฉันได้รายงานว่าสิ่งนี้เป็นข้อบกพร่อง: นักพัฒนา .facebook.com/bugs/276245435872240. จะอัพเดตคำตอบจาก Facebook ครับ   -  person medmunds    schedule 27.03.2014
comment
แน่นอนว่านี่คือการเปลี่ยนแปลงจาก FB โดยไม่แจ้งให้ทราบล่วงหน้า และลักษณะการทำงานใหม่นั้นเกิดจากการออกแบบ แนวทางอื่นในคำตอบของฉันด้านล่าง   -  person medmunds    schedule 31.03.2014


คำตอบ (1)


วิศวกรฝ่ายสนับสนุนนักพัฒนา Facebook ได้ยืนยันว่าผู้ใช้ทดสอบ login_url ไม่สามารถนำมาใช้เข้าสู่ระบบอัตโนมัติของผู้ใช้ทดสอบได้อีกต่อไป เนื่องจากการเปลี่ยนแปลงด้านความปลอดภัย เห็นได้ชัดว่ามันมีไว้สำหรับการทดสอบด้วยตนเอง

อย่างไรก็ตาม ฉันเป็นสามารถเข้าสู่ระบบอัตโนมัติของผู้ใช้ทดสอบ Facebook ที่สร้างขึ้นโดยทางโปรแกรมได้โดยการโพสต์ลงในแบบฟอร์มเข้าสู่ระบบปกติของ Facebook ดูเหมือนว่าสิ่งที่คุณต้องการคืออีเมลและรหัสผ่านที่ส่งคืนจาก API การสร้างผู้ใช้ทดสอบ (ดูเหมือนจะไม่จำเป็นต้องกรอกแบบฟอร์มเข้าสู่ระบบอื่นๆ แม้ว่าคุณจะยังคงต้องรับคุกกี้ก่อน)

รหัสด้านล่างใช้งานได้สำหรับฉันตอนนี้ (แทนที่โค้ด "สิ่งนี้ล้มเหลว" สองบรรทัดสุดท้ายจากคำถามเดิม):

# Login test user - THIS WORKS
response = session.post("https://www.facebook.com/login.php",
                        data={'email': test_user["email"],
                              'pass': test_user["password"]})
print response.status_code  # 200

ฉันไม่พบเอกสารนี้ที่ไหนเลย และ Facebook อาจเปลี่ยนรูปแบบการเข้าสู่ระบบในอนาคต ดังนั้น YMMV

person medmunds    schedule 30.03.2014
comment
สิ่งนี้พังในช่วงกลางปี ​​​​2558 เนื่องจากตอนนี้ Facebook ใช้ JavaScript เพื่อตั้งค่าคุกกี้ที่จำเป็น หากคุณใช้สภาพแวดล้อมการเขียนสคริปต์ที่ไม่ประมวลผล JS วิธีแก้ไขปัญหาชั่วคราวคือการรวม _fb_noscript=1 ในการดึงข้อมูล www.facebook.com ครั้งแรกของคุณ (เพื่อรับคุกกี้โดยไม่มี JS) ฉันจะอัปเดตสคริปต์ในคำถามเดิม - person medmunds; 20.08.2015
comment
อัปเดตเมื่อ 8/2017: ไม่จำเป็นต้องใช้ _fb_noscript=1 ในการดึงข้อมูลดั้งเดิมอีกต่อไป แต่ตั้งค่าคุกกี้ noscript=1 ซึ่งขณะนี้ทำให้คำขอตรวจสอบสิทธิ์ FB ในภายหลังบางรายการล้มเหลวด้วยสถานะ 500 - person medmunds; 26.08.2017