Checking if a user is logged into Drupal (the right way)

This article is more than 1 year old, so the content may be out of date.

I see this regularly when working on Drupal sites when someone wants to check whether the current user is logged in to Drupal (authenticated) or not (anonymous):

global $user;
if ($user->uid) {
// The user is logged in.
}

or

global $user;
if (!$user->uid) {
// The user is not logged in.
}

The better way to do this is to use the user_is_logged_in() function.

if (user_is_logged_in()) {
// Do something.
}

This returns a boolean (TRUE or FALSE) depending or not the user is logged in. Essentially, it does the same thing as the first example, but there's no need to load the global variable.

A great use case for this is within a hook_menu() implementation within a custom module.

/**
* Implements hook_menu().
*/
function mymodule_menu() {
$items['foo'] = array(
'title' => 'Foo',
'page callback' => 'mymodule_foo',
'access callback' => 'user_is_logged_in',
);

return $items;
}

There is also a user_is_anonymous() function if you want the opposite result. Both of these functions are available in Drupal 6 and higher.

Comments

Add new comment

Plain text

  • No HTML tags allowed.
  • Web page addresses and e-mail addresses turn into links automatically.
  • Lines and paragraphs break automatically.

About Oliver Davies

Oliver Davies is a Drupal Developer and Linux Systems Administrator. He is a Drupal.org Developer at the Drupal Association and also offers freelance development and consultancy services.