Ever needed to redirect a user to a custom page after logging in? Look no more as there are a couple of cool modules out there that allow you to do just that. Moreover, there is also some code you can use in a custom module to do a redirection according to your needs.
First, let’s get the non-coding options out of the way. There are a couple of great modules that you can use to perform redirects. Login Destination I believe is the most representative for this, but there are others as well such as LoginToboggan or Login Redirect. Additionally, you could use the Rules module and other site building techniques found in Drupal 7 core. I have actually covered Login Destination in an older post so feel free to brush up on that if you want.
Nevertheless, you can also do this in your custom module and I will show you how. Perhaps it’s an overkill for you to install one of these modules or your own module needs to define some conditions for the redirect to happen. For this, you can use hook_user_login(). I’m going to show you the code first and then explain:
function mymodulename_user_login(&$edit, $account) {
if (!isset($_POST['form_id']) || $_POST['form_id'] != 'user_pass_reset') {
if(in_array('custom role', $account->roles)) {
$_GET['destination'] = 'custom/page/of/your/choice';
}
}
}
Looking at this function you’ll notice some odd stuff. Mostly that the whole functionality is wrapped around a .php if conditional that checks for some form POST
values.
This makes sure that the redirection does not happen if the user is attempting to reset his password and it is quite important.
Once this is out of the way, another conditional checks if the user logging in has a certain permission role. This is optional and it is where your module can play its part by supplying the condition. You have access to the entire user $account
object to create all sorts of conditions (use the Devel module to dpm()
the variables and see what’s in them).
Finally, if everything is good, we pass the destination path to the $_GET
superglobal’s destination value. And that’s it. Like I said though, you can add all sorts of conditions here that your module comes up with so give it a go. It’s always fun to play around with these things.
And if something is not clear, just drop a line in the comments.

Daniel Sipos
Danny founded WEBOMELETTE in 2012 as a passion project, mostly writing about Drupal problems he faced day to day, as well as about new technologies and things that he thought other developers would find useful. Now he now manages a team of developers and designers, delivering quality products that make businesses successful.
Comments
Why dont use action and
Why dont use action and trigger? Its available Out of the Box.
This:if(in_array('custom
This:
if(in_array('custom permission', $account->roles)) {
should be corrected to this:
if(in_array('custom role', $account->roles)) {
The "roles" property contains the role names for the account, not the permissions assigned to that role.
In reply to This:if(in_array('custom by pjcdawkins (not verified)
Thanks for the catch! You are
Thanks for the catch! You are completely right.
Thanks for sharing,,
Thanks for sharing,,
Add new comment