没有密码的django认证
我在django中使用默认的身份验证系统,但是我在OpenID库上添加了一个OpenID库,我可以通过OpenID对用户进行身份验证。 我想要做的是登录它们,但似乎使用默认的django auth系统,我需要他们的密码来验证用户。 有没有一种方法可以避免使用密码?
我想要做这样的事情......
user = ... # queried the user based on the OpenID response
user = authenticate(user) # function actually requires a username and password
login(user)
我越早离开了authenticate
功能,但它会附加backend
字段,这是登录所需的。
为此编写自定义身份验证后端很简单。 如果使用以下内容创建yourapp / 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 = (
# ... your other backends
'yourapp.auth_backend.PasswordlessAuthBackend',
)
在您看来,您现在可以在不使用密码的情况下进行身份验证:
user = authenticate(username=user.username)
login(request, user)
这有点破解,但如果你不想重写一堆东西,删除身份验证
user.backend = 'django.contrib.auth.backends.ModelBackend'
login(request, user)
用户将是您的用户对象
您可以通过创建自己的身份验证后端并将其添加到AUTHENTICATION_BACKENDS
设置来轻松解决此问题。
已经有一些OpenID后端可用了,所以通过一些搜索,你可以节省写一个的麻烦。
链接地址: http://www.djcxy.com/p/33757.html