在'login / authenticated'获取'AttributeError','User'对象没有属性'backend'

时间:2011-05-31 19:50:12

标签: python django twitter-oauth

我正在使用找到here的Django 1.3的Python-Oauth2库。我最终会使用位于here的Twitter库。

我已经搜索了所有可能的内容,但我不知道为什么我会收到此错误。当其他人提出这个问题时,他们被告知这是因为他们没有要求进行身份验证(),但是我已经在登录之上了。

我已经设法弄清楚它失败的原因是以某种方式吸引到使用Django对authenticate()的调用。我通过评论登录确认了这一点 - 这很快就摆脱了错误。无论是个人资料/用户信息还是某种性质的东西,这种认证都会失败。

这是我的views.py:

中的代码
def twitter_authenticated(request):
    # Step 1. Use the request token in the session to build a new client.
    token = oauth.Token(request.session['request_token']['oauth_token'],
                        request.session['request_token']['oauth_token_secret'])
    client = oauth.Client(consumer, token)

    # Step 2. Request the authorized access token from Twitter.
    resp, content = client.request(access_token_url, "GET")
    if resp['status'] != '200':
        print content
        raise Exception("Invalid response from Twitter.")

    """
    This is what you'll get back from Twitter. Note that it includes the
    user's user_id and screen_name.
    {
        'oauth_token_secret': 'IcJXPiJh8be3BjDWW50uCY31chyhsMHEhqJVsphC3M',
        'user_id': '120889797',
        'oauth_token': '120889797-H5zNnM3qE0iFoTTpNEHIz3noL9FKzXiOxwtnyVOD',
        'screen_name': 'heyismysiteup'
    }
    """

    access_token = dict(cgi.parse_qsl(content))

    # Step 3. Lookup the user or create them if they don't exist.
    try:
        user = User.objects.get(username=access_token['screen_name'])
    except User.DoesNotExist:
        # When creating the user I just use their screen_name@twitter.com
        # for their email and the oauth_token_secret for their password.
        # These two things will likely never be used. Alternatively, you
        # can prompt them for their email here. Either way, the password
        # should never be used.
        user = User.objects.create_user(access_token['screen_name'], '%s@twitter.com' % access_token['screen_name'], access_token['oauth_token_secret'])

        # Save our permanent token and secret for later.
        profile = Profile()
        profile.user = user
        profile.oauth_token = access_token['oauth_token']
        profile.oauth_secret = access_token['oauth_token_secret']
        profile.save()

    # Authenticate the user and log them in using Django's pre-built
    # functions for these things.

    user = authenticate(username=access_token['screen_name'], password=access_token['oauth_token_secret'])
    login(request, user)

    return HttpResponseRedirect('/')

2 个答案:

答案 0 :(得分:1)

实际上,问题是我的身份验证视图功能中的身份验证调用由于密码(实际上是access_token['oauth_token_secret'])而失败。

因此我们在同一页面上,我正在讨论def twitter_authenticated(request):函数,它包含在python-oauth2 github页面本身,代码示例中,在视图代码部分中。< / p>

由于我升级了其他所有内容,以及Django 1.3,我在auth_user表中输入了错误的密码。

总结一下:只需在加载页面时查看Django调试输出(假设您的设置中有DEBUG = True),然后将其缩小到哪个确切的调用。我很确定你失败的功能,但对我来说是失败的,这是

user = authenticate(username='blahblah', password=access_token['oauth_token_secret'])

因此,请确保auth_user表/密码字段是access_token['oauth_token_secret']的正确SHA1。

我错误的原因...我有一台新电脑,所以我安装了所有最新的东西,但没有从旧电脑上传输数据库数据。

答案 1 :(得分:0)

我遇到了同样的问题。我只是注意到Python-Oauth2的github页面具有以下与views.py文件具体相关的消息:

“注意:以下代码是针对Python 2.4编写的,因此如果您使用的是Python 2.6 +,则可能需要更新此处的一些库和代码。”

我想我会尝试暂时降级到2.5以缩小它是否是django 1.3或python。