У меня есть веб-система, в которой есть 2 входа, один из которых является нормальным с именем пользователя и паролем, другой вход будет только с полем с именем rfid, в данный момент я тестирую с полем имени пользователя, затем я изменю это для поля RFID. Если то, что я пытаюсь сделать, это войти в систему без пароля, для этого я реализовал бэкэнд, чтобы иметь возможность войти в систему пользователя без пароля, просто он еще не разрешил мне войти и продолжает спрашивать меня о пароль. Как я могу это сделать?
Backend
from django.contrib.auth.backends import ModelBackend
from django.contrib.auth.models import User
class PasswordlessAuthBackend(ModelBackend):
def authenticate(self, username=None):
try:
return User.objects.get(username=username)
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 = ['django.contrib.auth.backends.ModelBackend',
'myproject.auth_backend.PasswordlessAuthBackend']
посмотреть .py
def login_rfid(request, username=None):
if request.method == 'POST':
form = AuthenticationForm(data=request.POST or request.GET or None)
if form.is_valid():
form.save()
username = form.cleaned_data.get('username')
user = authenticate(username=username)
if user is not None:
ogin(request, user)
return redirect('home')
else:
form = AuthenticationForm()
return render(request, "registration/login_rfid.html", {'form': form})
html
<form method="post" action="{% url 'login_rfid' %}">
{% csrf_token %}
<div>
<td>{{ form.username.label_tag }}</td>
<td>{{ form.username }}</td>
</div>
<div>
<input type="submit" value="login"/>
{# <input type="hidden" name="next" value="{{ next }}" />#}
<input type="hidden" name="next" value="/"/>
</div>
</form>