Drupal:自定义用户注册工作流以与另一个WebApp通信
-
22-09-2019 - |
题
我是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 );
}
}
注释:在我们的情况下,注册需要管理员批准。在这种情况下,有一个“更新”事件。一旦用户查询帐户,就会触发“插入”事件。
其他新手的信息:
其他提示
退后一步,看大图,您有几个选择。
- 为两个站点使用OpenID(有一个核心Drupal模块)
- 使用LDAP(有一个非常好的Drupal贡献模块)
- 查看其他模块提供其他应用程序的用户登录共享(例如 http://drupal.org/project/phpbb 或者 http://drupal.org/project/moodle 或许多其他)灵感
- 让您的Web应用程序使用Drupal的用户表。这是相对容易的,因为用户名是在纯文本中,并且密码只是MD5'ED(所以没有盐或任何东西可以使水域混乱)。
基本上,Hook_user是错误的。您需要做的是使用hook_form_alter更改登录表单的“ #validate”参数。这样,验证将传递到您的模块中的功能,在该功能中,您将获得$ form_values ['username']和$ form_values ['password']。您将其传递给您的URL 卷曲. 。如果正确返回,请什么都没有返回。如果未返回,请使用form_set_error,并且会拒绝登录。
祝你好运!
为了从页面检索响应,您可以使用 drupal_http_request()
以及一般安全说明,请确保您正在认证并验证应用程序之间的请求。通过HTTP通过获取参数传递纯文本也使我有些不适,但我不知道您的应用程序设置。