根据Django应用程序中的Drupal用户数据库表进行身份验证
我的工作对象是: A)一个大型Drupal 7.23应用程序运行在一个MySQL数据库上,拥有数千名用户,其中大约30名是员工 B)一个小型Django 1.3.7应用程序,使用PostgreSQL数据库运行,需要使用现有Drupal凭据登录此Django应用程序的用户很少(只有Drupal应用程序的员工) 工作流程如下所示:根据Django应用程序中的Drupal用户数据库表进行身份验证,django,authentication,drupal,Django,Authentication,Drupal,我的工作对象是: A)一个大型Drupal 7.23应用程序运行在一个MySQL数据库上,拥有数千名用户,其中大约30名是员工 B)一个小型Django 1.3.7应用程序,使用PostgreSQL数据库运行,需要使用现有Drupal凭据登录此Django应用程序的用户很少(只有Drupal应用程序的员工) 工作流程如下所示: 在每个应用程序中手动创建具有相同用户名的人员用户 员工用户进入dj.sitename.com,输入与在sitename.com上创建的帐户相同的用户名和密码,然后单击提交
实现这一点最简单的方法是什么?您所描述的是单点登录。您可以查看phpSimpleSAML并在Drupal和基于Django的应用程序上启用SAML。Drupal在此处提供了一个模块:
我猜Django已经存在某种类型的SAML模块/插件。您可以使用该模块将Drupal用户登录公开为HTTP服务,然后由自定义Django身份验证后端使用。成功登录后,服务将返回Drupal用户对象。此对象包括用户的角色,因此您可以使用它来验证用户是否有权访问您的应用程序。我有一个类似的请求,我已经详细说明了我的解决方案。Drupal和Django都运行在同一台服务器上,因此我可以使用TCP在两个平台之间共享数据,并在Django中执行Drupal操作 每次登录/注销都有两个步骤:
- 登录:Django登录->(自动)Drupal登录
- 注销:Drupal注销->(自动)Django注销
from subprocess import check_output
output = check_output(["drush", "-r", settings.DRUPAL_SITE_PATH, "-l", settings.DRUPAL_SITE_NAME, "user-login", drupal_id])
其中drupal_id是刚刚登录的django用户的drupal uid。我必须在django数据库中为drupal uid保留一个字段。通过Drush,您甚至可以在首次成功登录时创建用户
要注销,您必须从Drupal注销,然后从Django注销。您可以通过在触发事件用户已注销后调用django注销路径来完成此操作。您可以编写自己的身份验证后端:我正在尝试一个与。如果成功,将向您报告。@sgriffee您成功了吗?你到底做了什么?谢谢-我不知道SAML的事。我正在看phpSimpleSAML(simpleSAMLphp?),它看起来并不简单:)我知道这是一个很难解决的问题,我可能正在开始一段相当长的旅程——可能需要在OpenID、CAS和现在的SAML之间进行选择。看起来我可能需要创建一个单独的应用程序来充当中央身份服务器。如果我设法让SAML工作,并且没有其他建议,我会接受这个答案。只是提醒一下,OpenID在CAS和SAML中的使用并不多。我建议你还是选一个好的谢谢。simpleSAMLphp身份验证模块提供了将Drupal站点变成SAML服务提供者(即身份验证的消费者)的能力,OP建议Drupal应该是身份提供者(IdP)。为此有一个phpSimpleSAML模块,除了Drupal和Django站点之外,还需要运行一个SimpleSAMLphp IdP。