Drupal 7单点登录(带Moodle,wiki等)

时间:2012-03-14 12:02:13

标签: drupal drupal-7 single-sign-on moodle

我的所有用户都存储在我的drupal 7用户表中。

我也有一些外部网站,如Wiki和Moodle。

我用Drupal-6和Moodle进行了单点登录。 Moodle支持其他系统的用户。

使用Drupal 7函数user_hash_password在Moodle中哈希密码时,密码不一样。每次都有一个新哈希。

在Drupal 7用户表中是否还需要使用密码?

2 个答案:

答案 0 :(得分:0)

使用菜单钩子创建Drupal 7模块。菜单挂钩应接受用户名和密码作为$ _POST变量,然后遵循user_login()的身份验证跟踪。

基本上你最终会得到:

function my_module_authentication_menu_hook() {
  // Note anywhere below that I put return FALSE you should return a failed auth response.
  // Where there is a return TRUE you should return a successful auth response.
  // The formatting of the auth response is up to you with how your Moodle call will react.
  if (!isset($_POST['username']) || !isset($_POST['password'])) {
    return FALSE;
  }

  $username = $_POST['username'];
  $password = $_POST['password'];

  // Functionality from user_login_name_validate().
  if (user_is_blocked($username)) {
    return FALSE;
  }

  // Functionality from user_login_authenticate_validate().
  // You should add flood handling in here as well, but it can not be IP based, unless you
  // supply the IP of the user through your Moodle functionality.
  if (user_authenticate($username, $password) === FALSE) {
    return FALSE;
  }

  // See user_login_final_validate() and implement failed login functionality before success.
  return TRUE;
}

另一个我无法良心推荐的选择是,如果您不希望通过Drupal路由并希望直接查询数据库。您将不得不重现user_check_password()的代码及其依赖代码_password_crypt(),_ password_get_count_log2(),_ password_base64_encode()等。您还需要重现功能以识别用户是被阻止还是未经身份验证。您还需要验证是否允许用户使用user_login_default_validators()功能的再现进行登录。然后,如果Drupal核心中的任何代码更新,您将需要再次更新。出于维护原因,我真的建议通过Drupal进行路由。

答案 1 :(得分:0)

您可以考虑使用CAS模块等模块来驱动单个站点的密码输入。 Moodle和一些wiki支持这个IIRC。使用您的常规策略使其他字段在产品之间同步。