Implementing Django email-only authentication. My custom backend fails due to missing ‘get_user’. Below is an alternative implementation:
from django.contrib.auth import get_user_model
class EmailOnlyBackend:
def login_user(self, email_input=None):
User = get_user_model()
try:
return User.objects.get(email=email_input)
except User.DoesNotExist:
return None
def fetch_user(self, user_id):
User = get_user_model()
try:
return User.objects.get(pk=user_id)
except User.DoesNotExist:
return None
AUTH_BACKENDS = [
'myapp.custom_auth.EmailOnlyBackend',
'django.contrib.auth.backends.ModelBackend',
]
<form method="post" action="/process/">
{% csrf_token %}
<input type="text" name="user_email" placeholder="Email">
<button type="submit">Submit</button>
</form>
from django.shortcuts import redirect
from django.contrib.auth import authenticate, login
def process_login(request):
email_val = request.POST.get('user_email', '')
user_obj = authenticate(username=email_val)
if user_obj and user_obj.is_active:
login(request, user_obj)
return redirect('home')