开发者

How to redirect user to a specific page after they login if they belong to a certain role?

开发者 https://www.devze.com 2023-01-10 19:45 出处:网络
We have certain us开发者_如何学运维ers in our member list that have a role \"vendor\" attached to them. All such members are to be redirected to a certain page upon login. How can this be accomplished

We have certain us开发者_如何学运维ers in our member list that have a role "vendor" attached to them. All such members are to be redirected to a certain page upon login. How can this be accomplished?


There is more than one way to skin this cat... This is my preferred Drupal 7 method:

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


For Drupal 7

Action --> admin/config/system/actions - Redirect to URL

then enable your trigger module

Trigger --> /admin/structure/trigger/node

if your are trying to login redirect just follow this(select user tab in the page)

go to --> admin/structure/trigger/user

then Trigger: After a user has logged in

choose an action -->Redirect to URL and assign.

Then clear the cache.

It will work for you!


You can define actions and triggers in Drupal:

Action(admin/settings/actions) - Redirect to a specific page

Trigger (admin/build/trigger/user) - After user has logged in

Try this.

EDIT (see comments):

Create a small module to check on a user's login process what role he has and then redirect if neccesary. drupal_goto => redirect-function in drupal

hook_user =>triggers on user operations

And for the user's roles:

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

$vendor then holds a true/false value will decide to redirect or not.

If you don't know how to do this, just post here and I'll write the module for you. But this would be a good practice for writing future drupa modules for you perhaps. :)


There are 2 ways in DRUPAL 7

1) Using action and trigger see this http://drupal.org/node/298506

2)if using custom module

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; 

} 

}


You can use Rules

Events: User has logged in.
Condition: User has role
Actions: Page redirect


There are modules that do this (besides Trigger+Actions), such as LoginDestination: http://drupal.org/project/login_destination. This Drupal forum post has a bit more info about it as well.


following condition for hook_user

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


This can be achieved by using a combination of content access and login toboggan modules. You'll be able to restrict pages and prompt user to login to access them.


First set the conditions in form preprocess (for example I want to redirect only users that logged in using the form at node page)

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();
    }

}

than define redirect:

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

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号