2014-02-14 91 views

回答

0

它是由我使用定製的身份驗證後端引起的:

# settings.py 
AUTHENTICATION_BACKENDS = (
    'web.auth_backends.EmailAuthBackend', 
) 

# auth_backends.py 
class EmailAuthBackend(object): 
    def authenticate(self, email=None, password=None): 
     try: 
      user = User.objects.get(email__iexact=email) 
      if user.check_password(password): 
       return user 
     except User.DoesNotExist: 
      return None 

    def get_user(self, user_id): 
     try: 
      return User.objects.get(pk=user_id) 
     except User.DoesNotExist: 
      return None 

基本上它被通過關鍵字「用戶名」,但它接受的「電子郵件」代替。所以它引發了一個異常,在django的contrib.auth.authentificate中捕獲,用戶無法登錄。我通過用「email」替換「username」來解決它。

+0

如果您找到解決方案,請記住標記爲答案。 – SlackOverflow

1

Django rest框架支持不同的認證方法。不知道你的意思是/ api-auth /。在這個框架中沒有這樣的標準網址。請檢查documentation以瞭解可以使用哪些驗證方法以及如何進行驗證。

+0

如果你在問題中提供的鏈接並搜索'api-auth',你會發現我的意思。無論如何,這是我的錯,我錯誤地取代了我自己的身份驗證後端。 – clime

+0

那麼我做了搜索。我提供的鏈接上沒有api-auth。除了django-rest-framework的源代碼(也就是我首先檢查的)的源代碼中沒有api-auth – Aldarund

+0

這很奇怪,這是url http://www.django-rest-framework .org /,我可以找到這一段:_如果你打算使用可瀏覽的API,你可能還想添加REST框架的登錄和註銷視圖。將以下內容添加到您的根urls.py文件中._ 'urlpatterns = patterns('', ... url(r'^ api-auth /',include('rest_framework.urls',namespace ='rest_framework ')) )' – clime