【问题标题】:Using django-socialregistration and getting 'Facebook' object has no attribute 'graph'使用 django-socialregistration 并获取 'Facebook' 对象没有属性 'graph'
【发布时间】:2011-06-09 05:39:13
【问题描述】:

我已经安装了 djangosocialregistration,它似乎在一段时间内工作正常,但现在我遇到了一个错误,我不知道它来自哪里。在我看来,我这样做是为了开始查看 API...

me = request.facebook.graph.get_object("me")

我得到了这个......

'Facebook' 对象没有属性'graph'

在它停止工作后,我回滚了我所做的一些小改动,重置了所有内容,删除了 cookie,但它仍然无法正常工作。我正在运行 django 1.1.1,升级对我来说有点困难,但并非不可能。我一直在重新加载一堆试图让它工作的东西,Facebook 有没有可能限制他们的登录连接?

【问题讨论】:

    标签: django facebook django-socialauth


    【解决方案1】:

    socialregistration 中间件中的 Facebook 类如下所示:

    class Facebook(object):
        def __init__(self, user=None):
            if user is None:
                self.uid = None
            else:
                self.uid = user['uid']
                self.user = user
                self.graph = facebook.GraphAPI(user['access_token'])
    

    如果在__inii__ 上没有设置用户,它就不会设置graph。在中间件中,这应该通过以下方式设置:

    fb_user = facebook.get_user_from_cookie(request.COOKIES, getattr(settings, 'FACEBOOK_APP_ID', settings.FACEBOOK_API_KEY), settings.FACEBOOK_SECRET_KEY)
    
    request.facebook = Facebook(fb_user)
    

    所以我猜你的网站没有设置来自 Facebook 的 cookie。也许你添加一些调试日志来确定是否有来自 facebook 的 cookie。

    另一个猜测是request.facebook 在某处被覆盖。也许你也检查一下。

    【讨论】:

    • 是的,我已经深入研究了中间件,看看它是如何工作的,所以我看到了这个。一时兴起,我将 Facebook 类定义复制到了我的视图中,并且做到了!所以可能由于某种未知的原因,中间件没有加载到正确的位置。我对我的 django 版本有点怀疑。感谢您的帮助,绝对将我推向了正确的方向。
    • @DanAncona 您能否更具体地说明您所做的更改以及更改的位置?该项目的 github 页面上有一个关于此问题的错误,作者声称已在他最近的一些提交中修复了它。即使使用非 PyPi 版本并在该特定提交上签出也没有帮助我追踪它。我也尝试将中间件放置在我的中间件堆栈中的每个位置,但没有任何改变。
    • 我遇到的一个问题是我在 Windows 上遇到了可重复的、一致的登录问题,而在 Mac OS 上一切都很花哨。我最终将其归结为 Facebook python 库中的问题。我集成了这个 facebook.py 的黑客版本并最终让它工作:gist.github.com/1190267 我设置它以便如果 get_user_from_cookie 失败,它会尝试新版本。可能不是最理想的,但我有一个疯狂的(选举)截止日期要达到,而且它似乎有效。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-12
    • 2018-05-23
    • 1970-01-01
    • 2011-04-27
    • 2021-03-17
    • 2013-08-13
    相关资源
    最近更新 更多