Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
根据Django应用程序中的Drupal用户数据库表进行身份验证_Django_Authentication_Drupal - Fatal编程技术网

根据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上创建的帐户相同的用户名和密码,然后单击提交

我的工作对象是:

A)一个大型Drupal 7.23应用程序运行在一个MySQL数据库上,拥有数千名用户,其中大约30名是员工

B)一个小型Django 1.3.7应用程序,使用PostgreSQL数据库运行,需要使用现有Drupal凭据登录此Django应用程序的用户很少(只有Drupal应用程序的员工)

工作流程如下所示:

  • 在每个应用程序中手动创建具有相同用户名的人员用户

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

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

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

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


  • 实现这一点最简单的方法是什么?

    您所描述的是单点登录。您可以查看phpSimpleSAML并在Drupal和基于Django的应用程序上启用SAML。Drupal在此处提供了一个模块:


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

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

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

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

    • 登录:Django登录->(自动)Drupal登录
    • 注销:Drupal注销->(自动)Django注销
    我的分析的转折点是在使用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注销。您可以通过在触发事件用户已注销后调用django注销路径来完成此操作。

    您可以编写自己的身份验证后端:我正在尝试一个与。如果成功,将向您报告。@sgriffee您成功了吗?你到底做了什么?谢谢-我不知道SAML的事。我正在看phpSimpleSAML(simpleSAMLphp?),它看起来并不简单:)我知道这是一个很难解决的问题,我可能正在开始一段相当长的旅程——可能需要在OpenID、CAS和现在的SAML之间进行选择。看起来我可能需要创建一个单独的应用程序来充当中央身份服务器。如果我设法让SAML工作,并且没有其他建议,我会接受这个答案。只是提醒一下,OpenID在CAS和SAML中的使用并不多。我建议你还是选一个好的谢谢。simpleSAMLphp身份验证模块提供了将Drupal站点变成SAML服务提供者(即身份验证的消费者)的能力,OP建议Drupal应该是身份提供者(IdP)。为此有一个phpSimpleSAML模块,除了Drupal和Django站点之外,还需要运行一个SimpleSAMLphp IdP。