Abh*_*ini 1 python django django-authentication django-login
我在将自定义身份验证后端集成到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
Run Code Online (Sandbox Code Playgroud)
我的settings.py:
AUTHENTICATION_BACKENDS = (
'FMS.authBackend.authEmailBackend',
'django.contrib.auth.backends.ModelBackend',
)
Run Code Online (Sandbox Code Playgroud)
我的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')
]
Run Code Online (Sandbox Code Playgroud)
上面的代码在我的情况下不起作用。函数authenticateinauthEmailBackend永远不会被调用为控制台中没有打印任何内容,但我在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')
]
Run Code Online (Sandbox Code Playgroud)
但在较新的 Djangodjango.contrib.auth.views.login中不再支持,我们需要使用django.contrib.auth.views.LoginView. 我在某处读到要使用自定义AUTHENTICATION_BACKEND我们的 url 必须指向的地方,django.contrib.auth.views.login但这在这里是不可能的。
所以你能帮我解决这个问题吗?
小智 7
请求参数需要传递给身份验证方法
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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1872 次 |
| 最近记录: |