我是Drupal6的新手,花了很长时间搜索如何在没有成功的情况下实施以下功能:我将Drupal用作Web-App的前端/DOC板。我想在此Web应用程序上镜像所有用户帐户创建,更新和删除,即发送用户名和密码。

我开始编码一些模块实现 hook_user (http://api.drupal.org/api/function/hook_user/6),但我仍然想知道关于这个钩子的几个问题:

1)我找不到关于 $account 字段,因此不知道如何检索用户名和密码。
2) insert 操作告知“正在添加用户帐户”。当用户查询帐户或批准其待处理帐户时,这是触发的吗?
3)“从” WebApp上的用户管理是通过URL接口完成的。我只知道 header("Location: http://webapp/users/add?user=martin&pwd=bla") PHP原始性,但我担心这会重定向,而不仅仅是键入目标页面并继续代码流。有建议吗?

也许你们中的一些人已经对这样的模块进行了编程,或者将有更多文档的链接?
提前致谢,
马丁

有帮助吗?

解决方案 4

这是有效的最终代码。请注意,密码已检索MD5,因此从属WebApp也必须能够这样做:

function mirror_registration_user($op, &$edit, &$account, $category = NULL) {
 $cmd = 'http://www.example.com/register?name='.$account->name.'&pass='.$account->pass;

 if($op == 'insert'){
$cmd .= '&op=insert';
drupal_http_request( $cmd );
 }
 else if($op == 'delete'){
$cmd .= '&op=delete';
drupal_http_request( $cmd );
 }
 else if($op == 'after_update'){ // 'update' is a "before update event"
$cmd .= '&op=update';
drupal_http_request( $cmd );
 }
}

注释:在我们的情况下,注册需要管理员批准。在这种情况下,有一个“更新”事件。一旦用户查询帐户,就会触发“插入”事件。

其他新手的信息:

  • 在尝试调试代码时,可以回声$ cmd以在下一页的左上方写入$ cmd的内容。
  • 如果您编写Crapapy PHP代码并在使用挂钩时获取空白页,则可以添加到drupal/index.php以下调用:error_reporting(e_all); ini_set('display_errors',true); ini_set('display_startup_errors',true);允许使用调试信息。

  • 其他提示

    退后一步,看大图,您有几个选择。

    1. 为两个站点使用OpenID(有一个核心Drupal模块)
    2. 使用LDAP(有一个非常好的Drupal贡献模块)
    3. 查看其他模块提供其他应用程序的用户登录共享(例如 http://drupal.org/project/phpbb 或者 http://drupal.org/project/moodle 或许多其他)灵感
    4. 让您的Web应用程序使用Drupal的用户表。这是相对容易的,因为用户名是在纯文本中,并且密码只是MD5'ED(所以没有盐或任何东西可以使水域混乱)。

    基本上,Hook_user是错误的。您需要做的是使用hook_form_alter更改登录表单的“ #validate”参数。这样,验证将传递到您的模块中的功能,在该功能中,您将获得$ form_values ['username']和$ form_values ['password']。您将其传递给您的URL 卷曲. 。如果正确返回,请什么都没有返回。如果未返回,请使用form_set_error,并且会拒绝登录。

    祝你好运!

    为了从页面检索响应,您可以使用 drupal_http_request()

    以及一般安全说明,请确保您正在认证并验证应用程序之间的请求。通过HTTP通过获取参数传递纯文本也使我有些不适,但我不知道您的应用程序设置。

    许可以下: CC-BY-SA归因
    不隶属于 StackOverflow
    scroll top