2016-04-26 55 views
0

我試圖驗證自己的自定義用戶爲什麼身份驗證沒有返回Django的

def login_user(request): 
    print "hi" 
    context = RequestContext(request) 
    email = request.POST.get('username') 
    password = request.POST.get('password') 
     # print type(username) 
     # print "username",username 
    try: 
     print "email-->",email, "password", password 
     user=authenticate(username=email,password=password) 

     print 'user-->',user 
     if user.is_active: 
      json = {"email":email} 
      return render(request, 'success.html', json) 
     else: 
      return HttpResponse("Your account is disabled.") 
    except ObjectDoesNotExist: 
     return HttpResponse("INvalid User") 

當我打這個代碼,它總是給我的用戶==無。 我的身份驗證方法的返回None.Why這種情況正在發生

+0

'user = authenticate(username = email,password = password)'也許? –

+0

as @KlausD。說,你試圖驗證「電子郵件」和「密碼」作爲字符串,而不是他們的變量 –

+0

你確定你已經添加了所有必要的設置? –

回答

0
user=authenticate(username="email",password="password") 

如果你給在報價的價值,它會採取原始值。刪除引號並嘗試如下獲取要替換的變量的值。

user=authenticate(username=email,password=password) 
+0

我也試試這個。 –

+0

我想給硬編碼用戶,所以我用引號。 –

+0

你有沒有嘗試用相同的憑據登錄到你的網站?如果您的憑證錯誤或用戶不存在,您將得到None。 –

1

傳遞變量,而不是他們作爲字符串

user=authenticate(username=email, password=password) 

代替

user=authenticate(username="email", password="password") 

here你明白爲什麼它返回None

+0

我也傳遞了變量而不是他們的名字。但沒有任何幫助我 –

+0

@CPVerma然後你的憑據是錯誤的。你檢查你的數據庫嗎?你可以確保你的數據庫包含完全相同的數據,你給認證? – doniyor

+0

@ doniyor我檢查了我的憑證1000次。 –

0
USERNAME_FIELD = 'email' 

返回None是名稱導致您指定的EMAIL用戶名不匹配,身份驗證方法通過用戶名進行身份驗證,而不是通過電子郵件使用電子郵件作爲用戶名,如上指定,還使用User.DoesNotExist作爲例外。

+0

也許你沒有看到我的code.i在我的代碼中使用了這個'is_admin = models.BooleanField(default = False) objects = MyUserManager( ) USERNAME_FIELD ='email' #REQUIRED_FIELDS = ['date_of_birth'] ' –

+0

您是否在設置中註冊了您的身份驗證後端? – Bharathi