没有密码的身份验证 Django
Authentication without a passwrod Django
如标题所述,我正在尝试对没有密码的用户进行身份验证。我已经使用这个:django authentication without a password 来解决我的一个应用程序(在 Django 2.0 上)的问题,但我想在另一个应用程序中做同样的事情,但它在 Django 2.1 上。当我执行相同的实现时,我的自定义身份验证功能永远不会被调用。因此它不起作用。
auth_backend.py 中的当前设置:
from django.contrib.auth.backends import ModelBackend
from django.contrib.auth.models import User
class PasswordlessAuthBackend(ModelBackend):
"""Log in to Django without providing a password.
"""
def authenticate(self, username=None):
try:
return User.objects.get(username=username)
except User.DoesNotExist:
return None
def get_user(self, user_id):
try:
return User.objects.get(pk=user_id)
except User.DoesNotExist:
return None
在 settings.py 中设置:
AUTHENTICATION_BACKENDS = [
# auth_backend.py implementing Class PasswordlessAuthBackend inside yourapp folder
'yourapp.auth_backend.PasswordlessAuthBackend',
# Default authentication of Django
'django.contrib.auth.backends.ModelBackend',
]
但是当我在我的观点中尝试时
user = authenticate(username=user.username)
它从来没有命中我的自定义身份验证方法。感谢任何和所有帮助!
您在 settings.py
中的身份验证后端路径无效
yourapp.auth_backend.YourAuth
应该是
yourapp.auth_backend.PasswordlessAuthBackend
你能试着避开默认后端吗?
改变
AUTHENTICATION_BACKENDS = [
# auth_backend.py implementing Class PasswordlessAuthBackend inside yourapp folder
'yourapp.auth_backend.PasswordlessAuthBackend',
# Default authentication of Django
'django.contrib.auth.backends.ModelBackend',
]
到
AUTHENTICATION_BACKENDS = [
# auth_backend.py implementing Class PasswordlessAuthBackend inside yourapp folder
'yourapp.auth_backend.PasswordlessAuthBackend',
]
所以我解决了我自己的问题,感谢这里的文档:https://docs.djangoproject.com/en/2.1/topics/auth/customizing/
我所要做的就是在 auth_backend.py 来自
的 authetnicate 函数
def authenticate(self, username=None):
到
def authenticate(self, request, username=None):
在文档中它说您还可以更改 class 声明以不包括 ModelBackend,但无论哪种方式都有效。
如标题所述,我正在尝试对没有密码的用户进行身份验证。我已经使用这个:django authentication without a password 来解决我的一个应用程序(在 Django 2.0 上)的问题,但我想在另一个应用程序中做同样的事情,但它在 Django 2.1 上。当我执行相同的实现时,我的自定义身份验证功能永远不会被调用。因此它不起作用。
auth_backend.py 中的当前设置:
from django.contrib.auth.backends import ModelBackend
from django.contrib.auth.models import User
class PasswordlessAuthBackend(ModelBackend):
"""Log in to Django without providing a password.
"""
def authenticate(self, username=None):
try:
return User.objects.get(username=username)
except User.DoesNotExist:
return None
def get_user(self, user_id):
try:
return User.objects.get(pk=user_id)
except User.DoesNotExist:
return None
在 settings.py 中设置:
AUTHENTICATION_BACKENDS = [
# auth_backend.py implementing Class PasswordlessAuthBackend inside yourapp folder
'yourapp.auth_backend.PasswordlessAuthBackend',
# Default authentication of Django
'django.contrib.auth.backends.ModelBackend',
]
但是当我在我的观点中尝试时
user = authenticate(username=user.username)
它从来没有命中我的自定义身份验证方法。感谢任何和所有帮助!
您在 settings.py
中的身份验证后端路径无效yourapp.auth_backend.YourAuth
应该是
yourapp.auth_backend.PasswordlessAuthBackend
你能试着避开默认后端吗?
改变
AUTHENTICATION_BACKENDS = [
# auth_backend.py implementing Class PasswordlessAuthBackend inside yourapp folder
'yourapp.auth_backend.PasswordlessAuthBackend',
# Default authentication of Django
'django.contrib.auth.backends.ModelBackend',
]
到
AUTHENTICATION_BACKENDS = [
# auth_backend.py implementing Class PasswordlessAuthBackend inside yourapp folder
'yourapp.auth_backend.PasswordlessAuthBackend',
]
所以我解决了我自己的问题,感谢这里的文档:https://docs.djangoproject.com/en/2.1/topics/auth/customizing/
我所要做的就是在 auth_backend.py 来自
的 authetnicate 函数def authenticate(self, username=None):
到
def authenticate(self, request, username=None):
在文档中它说您还可以更改 class 声明以不包括 ModelBackend,但无论哪种方式都有效。