0

我是 Drupal6 的新手,花了很长时间寻找如何实现以下功能但没有成功:我使用 Drupal 作为 Web 应用程序的前端/文档板。我想在这个网络应用程序上镜像所有用户帐户的创建、更新和删除,即发送用户名和密码。

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

1)我找不到有关$account字段的文档,因此不知道如何检索用户名和密码。
2)insert操作提示“正在添加用户帐户”。是否在用户查询帐户或他/她的待定帐户创建已获批准时触发?
3) 'slave' webapp 上的用户管理是通过 URL 接口完成的。我只知道header("Location: http://webapp/users/add?user=martin&pwd=bla")PHP 原语,但我担心这会进行重定向,而不是仅仅点击目标页面并继续代码流。有什么建议吗?

也许你们中的一些人已经编写了这样的模块,或者会有更多文档的链接?
在此先感谢,
马丁

4

4 回答 4

0

退后一步,看看大局,你有几个选择。

  1. 对两个站点都使用 OpenID(有一个核心 Drupal 模块)
  2. 使用 LDAP(有一个非常好的 Drupal contrib 模块)
  3. 查看其他模块提供与其他应用程序(例如http://drupal.org/project/phpbbhttp://drupal.org/project/moodle或许多其他)的用户登录共享以获取灵感
  4. 让您的 Web 应用程序使用 Drupal 的用户表。这相对容易,因为用户名以明文形式存在,而密码只是 MD5'ed(所以没有盐或任何搅乱水域的东西)。
于 2010-01-22T17:15:55.790 回答
0

基本上, hook_user 是错误的。您需要做的是使用 hook_form_alter 更改登录表单的 '#validate' 参数。这样,验证将传递给您获取 $form_values['username'] 和 $form_values['password'] 的模块中的函数。您通过curl将其传递给您的 URL 。如果返回正确,则不返回任何内容。如果它没有返回,使用 form_set_error 它将拒绝登录。

祝你好运!

于 2010-01-22T18:35:24.237 回答
0

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

还有一般安全注意事项,请确保您正在验证和验证应用程序之间的请求。通过 HTTP 上的 GET 参数以纯文本形式传递密码也让我有些不安,但我不知道您的应用程序设置。

于 2010-01-22T19:29:34.200 回答
0

这是最后一段有效的代码。请注意,密码是通过 md5ified 检索的,因此从属 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 的内容写入下一页的左上角。
  • 如果你编写了糟糕的 php 代码并在使用 hook 时得到一个空白页面,你可以在 Drupal/index.php 中添加以下调用:error_reporting(E_ALL); ini_set('display_errors', TRUE); ini_set('display_startup_errors', TRUE); 允许拥有调试信息。

  • 于 2010-01-25T15:53:46.983 回答