Tôi muốn tạo một chương trình phụ trợ xác thực cho phép người dùng đăng nhập chỉ bằng email của họ (không có tên người dùng, không có mật khẩu).Phụ trợ xác thực tùy chỉnh. Django
Đây là những gì tôi đã thử.
backends.py:
from django.conf import settings
from django.contrib.auth.models import User
class EmailAuthBackend(object):
def authenticate(self, username=None, password=None):
try:
user = User.objects.get(email=username)
if user:
return user
except User.DoesNotExist:
return None
settings.py:
AUTHENTICATION_BACKENDS = (
'path_to.backends.EmailAuthBackend',
'django.contrib.auth.backends.ModelBackend',
)
html:
<form method="post" action="{% url myproject.views.test %}">
{% csrf_token %}
<input type="text" name="email" value=""/>
<button type="submit">Valider</button>
</form>
xem:
def test(request):
email = ''
if 'email' in request.POST:
email = request.POST.get('email')
if not User.objects.filter(email=email):
User.objects.create(email=email)
user = authenticate(username=email)
if user is not None:
if user.is_active:
auth_login(request, user)
return HttpResponseRedirect(reverse('home'))
Nó không hoạt động, người dùng không được xác thực. Và tôi cũng gặp lỗi này khi tôi truy cập vào/admin:
AttributeError at /admin/logout/
'EmailAuthBackend' object has no attribute 'get_user'
CẢM ƠN BẠN. Tôi chấp nhận câu trả lời càng sớm càng tốt. – Marcolac