为什么会有冲突变量?

4 投票
1 回答
504 浏览
提问于 2025-04-17 02:59

我在使用Facebook的JavaScript SDK和Python请求处理器的变量时,得到了相互矛盾的结果。JavaScript SDK显示我的用户没有登录,这个是对的;但我从基础请求处理器得到的模板变量却显示我的用户已经登录,并且还显示了用户的名字。有没有足够的信息来判断问题出在哪里,还是我应该把我认为相关的代码贴在这里?出错的登录页面链接在这里。我使用的示例叫做“runwithfriends”演示应用,除了在网站上使用这个应用的逻辑时不需要用户在应用的iframe中,其他的都正常。

另外,我似乎无法让实时API正常工作。我只能保存用户ID,而无法刷新用户数据,为什么呢?我有代码,但不确定哪些是最相关的,下面是一些请求处理器的代码,相关的代码基本上和演示应用中的一模一样:

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上的名字会出现:enter image description here然后当我进入下一页时,看起来也没问题,显示了我的名字:enter image description here但如果我登出,就会进入一种不可能的状态:我的名字 + 已登出

enter image description here我该如何解决这个JavaScript和后端之间的奇怪冲突呢?

更新:因为我只有在我的一个应用中遇到这个问题,所以我可以从其他应用中提取有效的部分进行整合。这个页面在我的其他应用中似乎可以正常工作:http://cyberfaze.appspot.com/file/20985

1 个回答

2

你提到的“用户”可能是指Django里的用户,而不是Facebook的用户。确保你正确地同步这两个账户,使用自定义的认证后端。如果用户换了浏览器,账户可能会不同步。

要注意的是,Facebook的Python SDK在10月1日之后将停止工作,除非他们更新到Oauth2.0,但这不太可能。

我刚刚更新了django-facebook-graph,使其能够适应新的认证流程。

撰写回答