Rai*_*ham 14 python authentication django backend
需要认真的帮助.
我有一个用django/python编写的应用程序,我必须扩展它并在此应用程序中包含一些其他解决方案作为"app".例如,我要集成的应用程序名为"my_new_app"现在有一个为主应用程序编写的后端身份验证,我无法使用它.我有一个mysql数据库来查询,主应用程序主要使用cassendra和redis.所以我的问题是,有没有什么办法可以为新的应用程序"my_new_app"使用单独的身份验证后端,并在同一个域中运行它们?问题可能不是那么清楚,如果被问到我会澄清.
Sto*_*ica 36
您可以拥有多个身份验证后端.只需设置AUTHENTICATION_BACKENDS在settings.py你的Django项目列出您要使用的后端实现.例如,我经常使用OpenID身份验证和标准Django身份验证的组合,如下所示settings.py:
AUTHENTICATION_BACKENDS = (
'django.contrib.auth.backends.ModelBackend',
'django_openid_auth.auth.OpenIDBackend',
)
Run Code Online (Sandbox Code Playgroud)
在这个例子中,Django将首先尝试使用身份验证django.contrib.auth.backends.ModelBackend,这是Django的默认后端.如果失败,那么它会移动到下一个后端,django_openid_auth.auth.OpenIDBackend.
请注意,您的自定义后端必须位于Django可见的路径中.在这个例子中,我要补充django_openid_auth到INSTALLED_APPS,否则Django将无法进口并使用它作为后端.
另请阅读相关文档,它编写得非常好,易于理解:https: //docs.djangoproject.com/en/dev/topics/auth/customizing/
我以前经历过这个问题.这是我使用的代码.
这是api/backend.py的身份验证后端
from django.contrib.auth.models import User
class EmailOrUsernameModelBackend(object):
def authenticate(self, username=None, password=None):
if '@' in username:
kwargs = {'email': username}
else:
kwargs = {'username': username}
try:
user = User.objects.get(**kwargs)
if user.check_password(password):
return user
except User.DoesNotExist:
return None
def get_user(self, user_id):
try:
return User.objects.get(pk=user_id)
except User.DoesNotExist:
return None
Run Code Online (Sandbox Code Playgroud)
这是我的settings.py
AUTHENTICATION_BACKENDS = (
'api.backend.EmailOrUsernameModelBackend',
'django.contrib.auth.backends.ModelBackend',
)
Run Code Online (Sandbox Code Playgroud)
希望能帮助到你.如果你还有问题,请告诉我.此代码将使您能够使用电子邮件来验证默认的Django用户,即使在Django管理员中也是如此.
| 归档时间: |
|
| 查看次数: |
19311 次 |
| 最近记录: |