从Django应用程序对Drupal用户数据库表进行身份验证

时间:2013-08-28 14:25:18

标签: django authentication drupal

我正在使用:

A)https://sitename.com运行的大型Drupal 7.23应用程序使用MySQL数据库,其中包含数千名用户,其中大约30名是员工。

B)一个小型Django 1.3.7应用程序在http://dj.sitename.com运行,使用PostgreSQL数据库,只有少数(只有Drupal应用程序的员工)用户,谁需要能够使用他们现有的Drupal凭证登录这个Django应用程序。

工作流程将是这样的:

  1. 在每个应用程序中手动创建具有相同用户名的员工用户。

  2. 员工用户访问dj.sitename.com并输入在sitename.com创建的帐户的相同用户名和密码,然后点击提交。 Django根据Drupal MySQL数据库中的users表检查用户名和密码,并将其与Django users表中的详细信息进行比较。如果匹配,则用户已登录。

  3. 当员工用户已登录Drupal应用程序并访问dj.sitename.com上的Django应用程序时,他们会自动登录,反之亦然。

  4. 当员工用户从Django应用程序注销时,他们也会从Drupal注销,反之亦然。

  5. 当用户在Drupal或Django应用程序中更改密码时,它会在两个系统中自动更改。

  6. 实现这一目标的最简单方法是什么?

3 个答案:

答案 0 :(得分:1)

您可以使用Services模块将Drupal用户登录公开为HTTP服务,然后您可以使用自定义Django身份验证后端。成功登录后,该服务将返回Drupal用户对象。该对象包括用户的角色,因此您可以使用它来验证用户是否有权访问您的应用程序。

答案 1 :(得分:0)

我有类似的请求,我详细说明了我的解决方案in this howto。 Drupal和Django都运行在同一台服务器上,所以我可以使用TCP在两个平台之间共享数据,drush在Django中进行D​​rupal操作。

每次登录/退出都有两个步骤:

  • 登录:Django登录 - > (自动)Drupal登录
  • 退出:Drupal注销 - > (自动)Django注销

我的分析的转折点是使用Drush在Django登录后生成并使用一次性登录。然后,我使用生成的url作为Django中登录成功的目标URL,并更改或禁止密码恢复消息以避免再次单击。

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注销。您可以通过Rules执行此操作,在用户已注销的事件被触发后调用django注销路径。

答案 2 :(得分:-1)

您所描述的是单点登录。您可以查看phpSimpleSAML并在Drupal和基于Django的应用程序上启用SAML。 Drupal在这里有一个模块:https://drupal.org/project/simplesamlphp_auth

我猜测Django已经存在某种类型的SAML模块/插件。

相关问题