“AnonymousUser”对象没有“backend”属性。

6
使用django-socialregistration时,出现以下错误:
'AnonymousUser' object has no attribute 'backend'

如何进行Facebook连接?

  1. 点击Facebook连接URL。
  2. 进入Facebook页面并要求登录。输入账号密码后,授权访问权限。
  3. 然后会跳转回你的网站,并要求设置用户和电子邮件地址。
  4. 提交后,可能会出现类似上述错误信息。

追踪点:

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

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


您的AnonymousUser类对象没有backend属性,这就是问题所在。 - Tadeck
我知道这个。我的问题是为什么django-socialregistration无法获取有效用户,而只能获取AnonymousUser。 - Elisa
能否粘贴完整的回溯信息? - meson10
谢谢meson10,现在它可以工作了。我的愚蠢错误是我忘记了以下设置:AUTHENTICATION_BACKENDS = ( 'django.contrib.auth.backends.ModelBackend', 'socialregistration.contrib.facebook.auth.FacebookAuth') - Elisa
你好,这个问题有进展了吗?我也遇到了类似的困难。虽然我没有使用任何社交认证,但我只是使用django.contrib.auth.login。 - Vasif
请查看我的上一条评论(就在你的上面),我已经修复了它。 - Elisa
3个回答

8

2
不,保罗,那不是我的情况。我的情况是我犯了一个愚蠢的错误,忘记了遵循以下设置:AUTHENTICATION_BACKENDS =('django.contrib.auth.backends.ModelBackend','socialregistration.contrib.facebook.auth.FacebookAuth') - Elisa

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)

希望能对某人有所帮助。

给你一些注意事项。如果您使用DATA而不是headers发送密码,这些密码将记录在服务器和发送者服务器的日志文件中。因此,请改用headers进行密码传输:new_password = request.headers.get['password']。另外,值得使用特殊函数:user = User.objects.create_user(username=username, email=email, password=new_password) - Constantine Kurbatov

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接