我在facebook javascript SDK和python requesthandler变量之间得到了相互矛盾的结果。 Javascript SDK说我的用户没有登录,这是正确的,而来自基本请求处理程序的模板变量表明我的用户已登录并显示用户的名称。是否有足够的信息来说明错误或者我应该粘贴我认为与此相关的代码?指向错误的登录页面的链接是here。我使用的示例称为来自facebook的runwithfriends演示应用程序,除了使用应用程序中的逻辑而不需要用户进入应用程序的iframe之外,该应用程序的所有工作都有效。
另外,我似乎无法让实时API工作。我只能保存userID而不刷新用户数据 - 为什么?我有代码,但我不确定什么是最相关的,但这里是一些请求处理程序,相关代码基本上与演示应用程序中的相同:
def render(self, name, **data):
logging.debug('render')
"""Render a template"""
if not data:
logging.debug('no data')
data = {}
data[u'js_conf'] = json.dumps({
u'appId': facebookconf.FACEBOOK_APP_ID,
u'canvasName': facebookconf.FACEBOOK_CANVAS_NAME,
u'userIdOnServer': self.user.id if self.user else None,
})
data[u'logged_in_user'] = self.user #variable that is the problem
data[u'message'] = self.get_message()
data[u'csrf_token'] = self.csrf_token
data[u'canvas_name'] = facebookconf.FACEBOOK_CANVAS_NAME
self.response.out.write(template.render(
os.path.join(
os.path.dirname(__file__), 'templates', name + '.html'),
data))
更奇怪的是,我还可以将应用程序置于javascript SDK表示用户已登录并且模板变量logged_in_user
另有说明的状态。为什么变量会发生冲突?
更新:以下是来自奇怪登录流程的屏幕截图。我可以去我的页面,我的名字来自facebook:
然后,当我进入下一页时,它看起来也很好,并且有我的名字
但如果我退出,那么我就处于不可能的状态:我的名字+已登出
如何解决js和后端之间的这种奇怪冲突?
更新:由于我的一个应用程序只有这个问题,我可以从我的其他应用程序中获取可用的功能并进行集成。此页面似乎适用于我的其他应用:http://cyberfaze.appspot.com/file/20985
答案 0 :(得分:2)
您的“用户”可能指的是Django用户而不是Facebook用户。确保使用自定义身份验证后端正确同步这两个帐户。帐户可能不同步,即用户是否切换浏览器。
请记住,Facebook Python SDK将在10月1日之后停止工作,除非他们将其更新为Oauth2.0,这是不可能的。
我刚刚更新django-facebook-graph以使用新的身份验证流程。