'AnonymousUser'对象没有属性'后端'

时间:2011-11-30 04:54:23

标签: python django

使用django-socialregistration,出现以下错误:

'AnonymousUser' object has no attribute 'backend'

如何,

  1. 我点击facebook connect url。
  2. 这就是我的Facebook并要求我登录。所以我做了,请求许可,我批准了。
  3. 之后它将我重定向到我的网站。并要求设置。我提供用户和电子邮件地址。
  4. 提交后,出现上述错误:
  5. 跟踪点:

    path/to_file/socialregistration/views.py in post
    128.      self.login(request, user)
    

    有人知道,出了什么问题吗?

3 个答案:

答案 0 :(得分:8)

哦,我曾经一直得到这个错误,基本上你是在打电话

self.login(request, user)

不打电话

authenticate(username=user, password=pwd)

第一

当你致电authenticate时,django会为用户设置后端属性,并注明要使用哪个后端,详情请见此处 https://docs.djangoproject.com/en/dev/topics/auth/#django.contrib.auth.authenticate

答案 1 :(得分:1)

我为新注册的用户犯了同样的错误。

def attempt_login(self, email, password):
    user = authenticate(username=email, password=password)
    login(self.request, user)

    return user 

我检查了数据库,注册后创建了用户,但是这个错误仍然存​​在。

我发现 - 用户登录(电子邮件)超过30个字符,表单字段没有验证。数据库中的用户名为get truncated,因此对于不存在的登录名称进行了身份验证。

254 - 字符是建议的电子邮件字段长度。

解决方案: emailfield-max_length-r11092.patch

答案 2 :(得分:1)

我刚收到此错误并发现此帖子。我的解决方案是在注册过程中。当用户注册时,我的api和序列化程序没有对密码进行哈希处理。所以在api_view中我不得不像这样手动哈希密码..

    from django.contrib.auth.hashers import make_password

    # In the register api..
    @ensure_csrf_cookie
    @api_view(['POST'])
    def register_api(request):

        # Anywhere before the serializer
        request.DATA['password'] = make_password(request.DATA['password'])

        # Then the serializer
        serializer = RegisterSerializer(data=request.DATA)

        # ... etc.. Note that if you want to login after register you will have
        # to store the initial password is some buffer because.. authentication
        # the none hashed version.. then
             authenticate(username=request.DATA['username'], password=someBuffer)

希望有人帮助..