Если я программно создам тестового пользователя 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
, который требуется с середины 2015 г. для тестовых клиентов, не поддерживающих JavaScript.] [Редактировать 8/2017: теперь удален _fb_noscript=1
; больше не требуется, и устанавливает файл cookie noscript
, который заставляет некоторые более поздние запросы аутентификации FB возвращать 500.]
Я также попытался открыть login_url непосредственно в браузере:
- Если я не еще не вошел в Facebook, я получаю стандартную страницу Facebook 404.
- Если я уже вошел в свою учетную запись разработчика, Facebook предупредит, что я войду в систему как тестовый пользователь платформы, а затем разрешит мне войти в учетную запись тестового пользователя.
Этот последний пункт, кажется, подтверждает, что тестовый пользователь создается правильно и что у меня есть правильный login_url. Но, конечно, это не поможет автоматизированному тестированию. (Мы не хотим запускать тесты под моей учетной записью разработчика.)
Есть ли другой способ использовать login_url тестового пользователя для автоматического тестирования?