2016-07-12 3 views
1

この問題に関する多くのトピックを読んでいますが、問題は常に存在します。ログインフォームを送信すると、authenticate関数()はNoneを返します。私は登録のために関数set_password()を使用し、何も変更しません。ここでDjango - authenticate()returnなし

は(もhere)私のコードです:

from django.contrib.auth.models import User 
from django.shortcuts import render 
from forms import LoginForm, RegistrationForm 
from django.contrib import auth 

def login(request): 
    state = 0 # 0 = initialisation/1 = OK/2 = BAD_PW 
    form = LoginForm() 
    if request.method == 'POST': 
     error = False 
     if request.method == "POST": 
      form = LoginForm(request.POST) 
      if form.is_valid(): 
       email = form.cleaned_data["email"] 
       password = form.cleaned_data["password"] 
       user = auth.authenticate(email=email, 
            password=password) 
       if user: 
        auth.login(request, user) 
        state = 1 
       else: 
        state = 2 
        print "login state " + str(state) 
     else: 
      form = LoginForm() 

    return render(request, "birneo/login.html", locals()) 

def register(request): 
    state = 0 
    form = RegistrationForm() 
    if request.method == 'POST': 
     form = RegistrationForm(request.POST) 
     if form.is_valid(): 
      user = User() 
      user.username = form.cleaned_data['username'] 
      user.email = form.cleaned_data['email'] 
      user.set_password(form.cleaned_data['password']) 
      user.save() 
      state = 1 
      form = RegistrationForm() 
     else: 
      form = RegistrationForm() 

    return render(request, "birneo/register.html", locals()) 

答えて

1

あなたの問題は、電子メール/パスワードのペアに対してユーザーを認証しようとすると、このようなペアを受け入れ、何のバックエンドがないことです。モデルのバックエンドはユーザ名とパスワードのペアを受け入れますので、メールで認証するには:

(...) 
if form.is_valid(): 
    email = form.cleaned_data["email"] 
    password = form.cleaned_data["password"] 
    username = User.objects.get(email=email).username 
    user = auth.authenticate(username=username, password=password) 
    if user: 
(...) 
関連する問題