1

给定一个 Drupal 7 网站,我想自定义登录行为:当用户登录时,我想检查他们是否在黑名单中。如果他们在该列表中,我希望他们自动注销并告知他们被踢出的原因。所以在这个drupal的一个自定义模块中,我添加了以下钩子:

function mymodule_user_login(&$edit, $account) {
  if(blacklist(&$edit, $account)) {
    drupal_goto("/user/logout/");
    drupal_set_message('Acces denied','error');
  }
}

但是,我的代码不起作用。我做错了什么?我确定钩子已执行,因为我使用看门狗检查了这一点。但是,我还发现只有当 admin 是登录用户时才会执行该钩子。

有没有其他选择(可能使用 Context 模块)?任何建议将不胜感激!

谢谢!

4

2 回答 2

2

您的代码不起作用,因为drupal_goto()调用drupal_exit()所以脚本的其余部分不会被执行。

您尝试执行的操作将不起作用,因为user_logout()本身将 drupal_goto() 调用到首页。但是,您可以在用户登录表单中添加额外的验证回调,以便完全阻止用户登录。

<?php
function mymodule_form_alter(&$form, &$form_state, $form_id) {
  switch ($form_id) {
    case 'user_login':
    case 'user_login_block':
      $form['#validate'][] = 'mymodule_custom_user_validation',

    break;
  }
}

function mymodule_custom_user_valudation($form, &$form_state) {
  if (// Add your blacklist conditons here. ) {
    form_set_error('', t('Your account is blacklisted, therefore you cannot login to this account'))
  }
}
?>
于 2013-02-04T01:06:26.403 回答
0

如果您对使用登录目标模块感兴趣,那么您可以创建某种类型的规则来挂钩您的黑名单检查,然后将该用户重定向到“用户/注销”路径。如果您有任何问题,请告诉我。

您的“blacklist()”函数到底在做什么?

于 2013-02-03T18:37:56.880 回答