如果用户属于某个角色,如何在用户登录后将其重定向到特定页面?

时间:2010-08-07 08:41:26

标签: drupal drupal-6 drupal-forms

我们的会员列表中有某些用户附加了“供应商”角色。所有这些成员在登录时都会被重定向到某个页面。如何实现这一目标?

9 个答案:

答案 0 :(得分:11)

给这只猫皮肤的方法不止一种...... 这是我首选的Drupal 7方法:

function hook_user_login(&$edit, $account) {
  $edit['redirect'] = 'node/123';
}

答案 1 :(得分:6)

Drupal 7

行动 - > admin / config / system / actions - 重定向到网址

然后启用触发模块

触发器 - >的 /管理/结构/触发/节点

如果您尝试登录重定向,请按照此处(在页面中选择用户标签)

转到 - > 系统管理员/结构/触发/用户

然后 触发:用户登录后

选择一项操作 - > 重定向到网址 并分配。

然后清除缓存。

它会对你有用!

答案 2 :(得分:4)

您可以在Drupal中定义操作和触发器:

动作(系统管理员/设置/操作) - 重定向到特定页面

触发( admin / build / trigger / user ) - 用户登录后

试试这个。

编辑(见评论):

创建一个小模块来检查用户的登录过程他有什么角色,然后在需要时重定向。 drupal_goto => drupal中的重定向功能

hook_user =>触发用户操作

对于用户的角色:

GLOBAL $user;
$roles = $user->roles;
$vendor = in_array('vendor', $roles);

$ vendor然后持有一个真/假值将决定是否重定向。

如果您不知道如何操作,请发布此处,我将为您编写模块。但这对于为您编写未来的drupa模块来说是一个很好的做法。 :)

答案 3 :(得分:4)

DRUPAL 7有两种方法

1)使用动作和触发器 请参阅此http://drupal.org/node/298506

2)如果使用自定义模块

function YOURMODULE_user_login(&$edit, $account) {

 if (!isset($_POST['form_id']) || $_POST['form_id'] != 'user_pass_reset' || variable_get('login_destination_immediate_redirect', FALSE)) {

 if(in_array('THE-ROLE-WANTED-TO-REDIRECT',$account->roles)): 

drupal_goto('PATH');

 else: drupal_goto('user/'.$account->uid); 

endif; 

} 

}

答案 4 :(得分:4)

您可以使用Rules

事件:用户已登录。
条件:用户有角色
操作:页面重定向

答案 5 :(得分:2)

有些模块执行此操作(除了Trigger + Actions),例如LoginDestination:http://drupal.org/project/login_destination。这个Drupal forum post也有更多关于它的信息。

答案 6 :(得分:2)

hook_user的以下条件

if($op =='login') drupal_goto("your path");

答案 7 :(得分:1)

这可以通过使用content accesslogin toboggan模块的组合来实现。您将能够限制页面并提示用户登录以访问它们。

答案 8 :(得分:1)

首先在表单预处理中设置条件(例如,我只希望重定向使用节点页面上的表单登录的用户)

function YOURMODULE_form_user_login_alter(&$form, &$form_state, $form_id)
{
    $pathArguments = explode('/', current_path());
    if (count($pathArguments) == 2 && $pathArguments[0] === 'node' && is_numeric($pathArguments[1])) {
        $form_state['nodepath'] = current_path();
    }

}

比定义重定向:

function YOURMODULE_user_login(&$edit, $account)
{
    if (isset($edit['nodepath']) && !empty($edit['nodepath'])) {
        drupal_goto($edit['nodepath']);
    }
}