404错误尝试使用Facebook测试用户login_url

med*_*nds 4 facebook facebook-graph-api facebook-test-users

如果我以编程方式创建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
Run Code Online (Sandbox Code Playgroud)

其他人已经注意到,在测试用户的login_url工作之前,您必须首先获取Facebook主页.我们遇到了同样的问题,我已经将上面的解决方法包括在内,没有任何运气.[编辑:添加了_fb_noscript=1查询参数,从2015年中开始需要非JavaScript测试客户端.] [编辑8/2017:现已删除_fb_noscript=1; 不再需要,并设置一个noscriptcookie,使稍后的FB身份验证请求返回500.]

我还尝试直接在浏览器中打开login_url:

  • 如果我还没有登录Facebook,我会得到一个通用的Facebook 404页面.
  • 如果我已登录我的开发者帐户,Facebook会警告我将以平台测试用户身份登录,然后允许我进入测试用户的帐户.

最后一点似乎确认正在正确创建测试用户并且我有正确的login_url.但是,当然,这对自动化测试毫无帮助.(我们不希望运行登录到我的开发者帐户的测试.)

是否有其他方式测试用户的login_url用于自动化测试?

med*_*nds 6

Facebook的开发者支持工程师已经证实,测试用户login_url不再能用于测试用户的自动登录,出于安全性的变化.显然它是用于手动测试的.

,但是,能够通过张贴到Facebook的正常登录形式,实现了编程方式创建的Facebook测试用户的自动登录.您似乎只需要从create-test-user API返回的电子邮件和密码.(似乎不需要其他登录表单字段,但您仍需要先获取cookie.)

下面的代码现在正在为我工​​作(从原始问题替换最后两个"这个失败"代码行):

# 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
Run Code Online (Sandbox Code Playgroud)

我没有在任何地方找到这个文件,Facebook可能会在将来更改他们的登录表格,所以YMMV.