如何进行自定义身份验证后端?

时间:2020-04-29 16:33:48

标签: python django django-forms django-views django-templates

我有一个具有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>

0 个答案:

没有答案