Я пытаюсь аутентифицировать пользователя с помощью пользовательской формы входа, но authenticate () возвращает None.
Я создал пользовательский шаблон формы входа, представление индекса, в котором отображается форма входа для неаутентифицированных пользователей иЕще один шаблон для аутентифицированных, я «сопоставил» соответствующие URL-адреса с требуемыми функциями представлений и добавил несколько отладочных сообщений с печатью, чтобы узнать, в какой части кода поток останавливается.
В views.py
def index(request):
if request.user.is_active and request.user.is_authenticated:
print(request.user)
if request.user.groups.filter(name='groupname').exists():
print('does have groups')
else:
print('doesnot have groups')
return render(request, 'generic_pages\\index_and_login\\menu1.html', {})
else:
return render(request, 'generic_pages\\index_and_login\\generic_login.html', {})
def login_user(request):
print('We are in login_user')
logout(request)
username = password = ''
if request.POST:
print('We know we have a POST request')
username = request.POST['login'][0]
password = request.POST['login'][1]
user = authenticate(username=username, password=password)
print(user) #Prints the user object
if user is not None and user.is_active:
print('We know user is active')
login(request, user)
return HttpResponseRedirect('/')
В urls.py
urlpatterns = [
path('admin/', admin.site.urls),
#path('accounts/', include('django.contrib.auth.urls')),
re_path(r'^$', views.index, name='index'),
path('', views.index, name='index'),
re_path(r'^login', views.login_user, name='login_user'),
re_path(r'^logout', views.logout_user, name='logout_user'),
re_path(r'^.*/$', views.handler404, name='handler404'),
]
В generic_login.html
{% load static %}
<link href="//maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" rel="stylesheet" id="bootstrap-css">
<script src="//maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<link rel="stylesheet" type="text/css" href="{% static 'generic_pages/index_and_login/css/generic_login.css' %}" >
<div class="wrapper fadeInDown">
<div id="formContent">
<div class="fadeIn first">
<img src="{% static 'generic_pages/index_and_login/images/slot1.png' %}" id="icon" alt="User Icon" />
</div>
<form method="POST" action="/login/">
{% csrf_token %}
{{form.as_p}}
<input type="text" id="login" class="fadeIn second" name="login" placeholder="login">
<input type="password" id="password" class="fadeIn third" name="login" placeholder="password">
<input type="submit" class="fadeIn fourth" value="Log In">
</form>
</div>
</div>
И это вывод на экран отладки, где я вижу, что authenticate () возвращает None...
System check identified no issues (0 silenced).
May 18, 2019 - 15:27:38
Django version 2.2.1, using settings 'vpSlots_django.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CTRL-BREAK.
We are in login_user
We know we have a POST request
None
[18/May/2019 15:28:24] "POST /login/ HTTP/1.1" 302 0
[18/May/2019 15:28:24] "GET / HTTP/1.1" 200 1074
РЕДАКТИРОВАТЬ Я изменил html имена имени пользователя и пароля, как и советовал, я также изменил свои представления, как показано ниже.Я тоже обновляю отладку.Тем не менее, я получаю None.
Обновлен views.py
def login_user(request):
print('We are in login_user')
logout(request)
username = password = ''
if request.POST:
print('We know we have a POST request')
print(request.POST)
username = request.POST['login']
password = request.POST['password']
print("User/Pass: ", username, "/", password)
user = authenticate(request.POST)
print(user) #Prints the user object
if user is not None and user.is_active:
print('We know user is active')
login(request, user)
return HttpResponseRedirect('/')
Обновлен шаблон страницы входа
{% load static %}
<link href="//maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" rel="stylesheet" id="bootstrap-css">
<script src="//maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<link rel="stylesheet" type="text/css" href="{% static 'generic_pages/index_and_login/css/generic_login.css' %}" >
<div class="wrapper fadeInDown">
<div id="formContent">
<div class="fadeIn first">
<img src="{% static 'generic_pages/index_and_login/images/slot1.png' %}" id="icon" alt="User Icon" />
</div>
<form method="POST" action="/login/">
{% csrf_token %}
{{form.as_p}}
<input type="text" id="login" class="fadeIn second" name="login" placeholder="login">
<input type="password" id="password" class="fadeIn third" name="password" placeholder="password">
<input type="submit" class="fadeIn fourth" value="Log In">
</form>
</div>
</div>
Обновлен журнал отладки
System check identified no issues (0 silenced).
May 18, 2019 - 16:01:18
Django version 2.2.1, using settings 'vpSlots_django.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CTRL-BREAK.
We are in login_user
We know we have a POST request
<QueryDict: {'csrfmiddlewaretoken': ['FvxrtNJllBAqfh7Ir8qK9nCu4gWyeNCb33XRPcJs5PQNb6h6tASiHDDRedWaRUpp'], 'login': ['Player01'], 'password': ['rascal123']}>
User/Pass: Player01 / rascal123
None
[18/May/2019 16:01:26] "POST /login/ HTTP/1.1" 302 0
[18/May/2019 16:01:26] "GET / HTTP/1.1" 200 1077