หากฉันสร้าง ผู้ใช้ทดสอบ 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 ของผู้ใช้ทดสอบจะใช้สำหรับการทดสอบอัตโนมัติ