python - 自定义电子邮件身份验证后端在 django 2.1.4 中不起作用
问题描述
我在将自定义身份验证后端集成到django 2.1.4
. 以下是我的代码:
我的FMS.authBackend
模块:
from django.contrib.auth import get_user_model
from django.contrib.auth.backends import ModelBackend
class authEmailBackend(ModelBackend):
def authenticate(self, username=None, password=None, **kwargs):
print("aaaaaaa")
UserModel = get_user_model()
try:
user = UserModel.objects.get(email=username)
except UserModel.DoesNotExist:
return None
else:
if user.check_password(password):
return user
return None
我的settings.py
:
AUTHENTICATION_BACKENDS = (
'FMS.authBackend.authEmailBackend',
'django.contrib.auth.backends.ModelBackend',
)
我的urls.py
:
from django.contrib.auth import views as auth_views
urlpatterns = [
path('login', my_decos.logout_required(auth_views.LoginView.as_view(template_name = 'register/login.html')),name = 'login')
]
上面的代码在我的情况下不起作用。函数authenticate
inauthEmailBackend
永远不会被调用,因为控制台中没有打印任何内容,但我在authenticate
函数中打印语句。
虽然相同的代码适用django 2.0.8
,但唯一的区别urls.py
是:
from django.contrib.auth import views as auth_views
urlpatterns = [
path('login', my_decos.logout_required(auth_views.login(template_name = 'register/login.html')),name = 'login')
]
但在较新的 djangodjango.contrib.auth.views.login
中不再支持,我们需要使用django.contrib.auth.views.LoginView
. 我在某处读到使用自定义AUTHENTICATION_BACKEND
我们的 url 必须指向的地方,django.contrib.auth.views.login
但这在这里是不可能的。
所以你能帮我解决这个问题吗?
解决方案
请求参数需要传递给 authenticate 方法
class authEmailBackend(ModelBackend):
**def authenticate(self, request, username=None, password=None, **kwargs):**
print("aaaaaaa")
UserModel = get_user_model()
try:
user = UserModel.objects.get(email=username)
except UserModel.DoesNotExist:
return None
else:
if user.check_password(password):
return user
return None
推荐阅读
- spring - ::TIMESTAMP::DATE 在 Java/Spring 中工作吗?
- python - 错误框中的混淆矩阵值
- java - 使用 WebFlux 使用 cookie 跟踪重定向
- android-studio - 将包导入flutter(Andriod Studio)时面临一个大问题。我已经尝试了其他解决方案的所有方法
- laravel - Lumen 主页在 AWS 上有效,但其他主页无效
- machine-learning - tensorflow.js 模型不学习
- c# - 谁能建议一种简单的方法来使用没有 DataAdapter 的 Microsoft.Data.Sqlite 使用更改的数据更新 SQLite 数据库?
- highcharts - 如果文本太长,则从头开始显示 highcharts 节点文本
- flutter - Flutter 获取文件名
- c++ - 一种对齐排序结构成员的方法 - 月份和降雨量