2011-11-30 67 views
6

使用Django-socialregistration,得到了以下錯誤:'AnonymousUser' 對象有沒有屬性 '後臺'

'AnonymousUser' object has no attribute 'backend' 

如何,

  1. 我點擊Facebook的連接網址。
  2. 帶我到Facebook並要求我登錄。所以我做了,得到了許可,我批准了。
  3. 之後,它將我重定向到我的網站。並要求設置。我提供用戶和電子郵件地址。
  4. 一旦我提交了錯誤,如上面:

跟蹤點:

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

不要任何人知道,有什麼不對?

+0

你'AnonymousUser'類的對象沒有'backend'屬性。這是錯的。 – Tadeck

+0

我知道。我的問題是爲什麼Django社會化註冊無法獲得有效的用戶,但它得到AnonymousUser – Elisa

+0

你可以粘貼完整的tracback? – meson10

回答

8

哦,天哪,我用得到這個錯誤的時候,基本上你在呼喚

self.login(request, user) 

,而無需調用

authenticate(username=user, password=pwd)

第一

,當你調用authenticate,Django的套用戶的後端屬性,註明要使用哪個後端,請參閱此處瞭解更多詳細信息 https://docs.djangoproject.com/en/dev/topics/auth/#django.contrib.auth.authenticate

+2

不Paulo,這不是我的情況。我的情況是,我忘記了以下設置的愚蠢錯誤:AUTHENTICATION_BACKENDS =('django.contrib.auth.backends.ModelBackend','socialregistration.contrib.facebook.auth.FacebookAuth') – Elisa

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

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) 

希望幫助別人..