gpt4 book ai didi

django - 自定义身份验证后端。 Django

转载 作者:行者123 更新时间:2023-12-04 01:35:17 25 4
gpt4 key购买 nike

我想创建一个身份验证后端,允许用户仅使用他们的电子邮件(无用户名,无密码)登录。

这是我尝试过的。

后端.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

设置.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>

看法:
 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'))

它不起作用,用户未经过身份验证。当我转到/admin 时,我也遇到此错误:
    AttributeError at /admin/logout/
'EmailAuthBackend' object has no attribute 'get_user'

最佳答案

对于 Django 中的每个自定义后端,您需要指定 get_user功能。见 the documentation . get_user实现可以简单地使用现有的 User 表,就像你一样:

def get_user(self, user_id):
try:
return User.objects.get(pk=user_id)
except User.DoesNotExist:
return None
需要这样做的原因是在您需要通过其主键从不同来源获取用户的情况下。

关于django - 自定义身份验证后端。 Django ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13954309/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com