【问题标题】:Issues with hook_user and redirecting logout in DrupalDrupal 中 hook_user 和重定向注销的问题
【发布时间】:2011-07-16 05:50:24
【问题描述】:

好的,所以我正在尝试使用以下模块自定义除首页之外的其他注销目标:

function mymodule_user($op, &$edit, &$account, $category = NULL) { switch ($op) { case 'logout': $_REQUEST['destination'] = 'user'; break; default: break; } }

如果我可以在用户注销后将我网站上的用户重定向回登录表单,那就太好了,但这似乎不起作用。我尝试了全新安装,但似乎也无法在那里工作。

我错过了什么吗?

编辑:

我似乎可以设置更改登录的案例并且它可以工作,但是即使没有登录案例,注销似乎也不会以相同的方式触发:

function mymodule_user($op, &$edit, &$account, $category = NULL) { global $user; switch ($op) { case 'logout': drupal_goto('user'); break; case 'login': $dest = $arr[0]; $_REQUEST['destination'] = $dest; break; default: break; } }

【问题讨论】:

    标签: drupal redirect module logout


    【解决方案1】:

    您可以添加:

    unset($edit['destination']); 
    

    之后:

    $_REQUEST['destination'] = $dest;
    

    【讨论】:

      【解决方案2】:
      function MY_MODULE_user($op, &$edit, &$account, $category = NULL) {
        global $user;
        switch ($op) {
          case 'logout':
            drupal_goto('user');
            break;
        }
      }
      

      【讨论】:

      • 将“stat”替换为“YORMODELENAME”
      • 确保将模块的权重设置为非常重 (9999) 或其他东西,以便它在请求周期中运行得很晚。否则,您可能会冒一些在注销请求期间应该运行的模块实际上没有运行的风险。
      【解决方案3】:

      您可以将其与规则一起使用,而不是代码。

      但如果它不起作用,则可能有一个 drupal_goto() 干扰了其他地方。

      您还应该在注销案例中放入一个看门狗调用,以了解您的钩子已触发。

      【讨论】:

      • 似乎从未触发过注销案例。
      • 在没有启用其他模块的情况下,drupal_goto 会在哪里干扰新站点?
      • 你能不能把debug语句放进去,看看你登出的时候$op是什么?案件真的“注销”吗?我记得以前用这个钩子有问题,但是规则适用于登录/注销时重定向。
      • 我刚想到,如果模块钩子命名错误,它根本不会触发。检查一下?
      • 我只是使用了一个通用的 redirect_user 作为钩子。如果我只是离开登录案例,它可以正常工作,所以我认为模块至少设置正确。即使将呼叫留在交换机之外,Watchdog 也不会记录任何内容,而且我无法打印任何通用输出。有没有更好的方法来返回 $op 的内容进行测试?
      猜你喜欢
      • 2016-07-05
      • 1970-01-01
      • 2018-05-22
      • 1970-01-01
      • 1970-01-01
      • 2021-02-19
      • 1970-01-01
      • 1970-01-01
      • 2018-12-10
      相关资源
      最近更新 更多