3

我正在与:

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 数据库中的用户表检查用户名和密码,并将其与 Django 用户表中的详细信息进行比较。如果它们匹配,则用户已登录。

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

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

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

完成此任务的最简单方法是什么?

4

3 回答 3

1

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

于 2013-09-04T17:21:05.967 回答
0

我有一个类似的请求,我已经在这个 howto 中详细说明了我的解决方案。Drupal 和 Django 都在同一台服务器上运行,因此我可以使用 TCP 在两个平台之间共享数据,并使用 drush在 Django 中执行 Drupal 操作。

每次登录/注销都有两个步骤:

  • 登录: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 注销路径。

于 2015-10-11T06:05:15.350 回答
-1

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

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

于 2013-08-29T02:52:57.047 回答