我有一个具有2个登录名的Web系统,其中一个是使用用户名和密码的普通登录名,另一个登录名只能是一个名为rfid的字段,此刻我正在测试用户名字段,然后我将进行更改它为现场RFID。如果我要执行的操作是不使用密码登录,那么为此,我实现了一个后端,可以使用不使用密码登录的用户,只是他还没有允许我登录,并一直询问我密码。我该怎么办?
后端
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']
view.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>