2011-09-16 39 views
3

我有一些非常簡單的事情,我扔在一起。我有一個小的形式是這樣的:Django身份驗證失敗403沒有詳細消息

<form id="loginForm" action> 
    <input name="email_address" type="text" placeholder="Email"> 
    <input name="password" type="password"> 
    <a id="loginButton">Login</a> 
</form> 

我的JavaScript執行以下操作:

$("#loginButton").click(function(){ 
    $.post("/login/",$("#loginForm").serialize(), function(data) { 
     console.log("login."); 
    }); 
}); 

我寫了一個自定義Django的認證後端:

from my.custom.project.models import User 

class MyBackend: 

    def authenticate(self, email_address=None, password=None): 
     print "Trying to auth" 
     try: 
      return User.objects.get(email_address=email_address, password=password) 
     except User.DoesNotExist: 
      return None 

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

我有這個配置我的settings.py像這樣:

AUTHENTICATION_BACKENDS = (
    "my.custom.project.auth.MyBackend", 
) 

在我爲/login/路徑實際看,這是我有:

from django.contrib import auth 

def login(request): 
    print "Trying to auth..." 
    email_address = request.POST['email_address'] 
    password = request.POST['password'] 

    user = auth.authenticate(email_address=email_address, password=password) 

    if user != None: 
     auth.login(request, user) 

    direct_to_template(request, "my/login/template.json") 

這裏是我的URL映射:

from django.conf.urls.defaults import * 
from django.contrib import admin 
from django.contrib.staticfiles.urls import staticfiles_urlpatterns 

admin.autodiscover() 

urlpatterns = staticfiles_urlpatterns 

urlpatterns += patterns('', 
    (r'^admin/', include(admin.site.urls)), 
    (r'^admin/doc', include('django.contrib.admindocs.urls')), 
) 

urlpatterns += patterns('my.project.views', 
    (r'^$', 'root'), 
    (r'^login/?$', 'login'), 
    (r'^logout/?$', 'logout'), 
) 

有人能看到我在做什麼錯在這裏?我在Django服務器輸出中得到的全部是:

[16/Sep/2011 20:17:47] "POST /login/ HTTP/1.1" 403 2326 

我正在服用瘋狂藥嗎?我忽略了什麼?

回答

1

嗯,有一件事你做的是

from django.contrib.auth import authenticate,login,logout 

,然後重新登錄

def login(request): 

,然後再次調用另外一個,這是不是能再連接(通過自己的登錄功能覆蓋) 。

login(request, user) 

不知道,但如果這是造成的錯誤,雖然。

+0

啊!可能就是這樣! –

+0

:(不,還是相同的問題,我會更新我的問題,包括修復。 –

+0

有什麼奇怪的是,我沒有擊中我在那裏的任何日誌語句,我什麼也沒有。 –

0

此外,該行:

return User.objects.get(email_address=email_address, password=password) 

意味着用戶記錄存儲密碼,不被明文。而事實上,它存儲密碼的鹽漬散列,所以你可能需要自己實現所有的功能。

+0

這是我自己定製的類,它是爲了簡化事情而編寫的,我確實手工醃製了我的密碼,但我忽略了這一點,因爲我認爲它不是它的一部分這裏的問題。 –