9

I know how to check if the user is logged in through PHP, but I need to do some styling when an event occurs, and I created a separate JavaScript file for this. Is this a Drupal variable or something which I can reference too?

Muhammad Reda
  • 26,379
  • 14
  • 93
  • 105
samwell
  • 2,757
  • 9
  • 33
  • 48
  • 1
    You're doing styling in javascript? Be very careful about what you do in javascript based on user authentication. It's VERY easy for anyone to manipulate the JS on your page. – Ben Oct 01 '12 at 13:34

5 Answers5

15

Create a new custom module with hook_init implementation.

function [YOUR_MODULE]_init()
{
    global $user;
    drupal_add_js(array('user_js_uid' => $user->uid), 'setting');
}

Then in your javascript code, check for the value of the variable defined in the module user_js_uid.

if(Drupal.settings.user_js_uid == 0)
{
    // execute code for non logged in users
}
else
{
    // execute code for logged in users
}
Muhammad Reda
  • 26,379
  • 14
  • 93
  • 105
14

If you are waiting for the DOM to be ready and use standard generated Drupal CSS classes, you could do something like (with jQuery):

if( $( "body.not-logged-in" ).length )
{
    // user is not logged in
}
Haje
  • 415
  • 3
  • 5
  • 1
    This is a great solution and you don't need to write a custom module if you're not using Varnish or similar – Bery Aug 07 '14 at 07:48
  • 1
    Like this one. This method no need to write PHP, just pure JavaScript. – Sunry Jul 02 '16 at 03:17
6

For Drupal 8 if you use Drupal.behaviors, you can access the user UID in settings:

(function($, Drupal, viewport, settings) {
  "use strict";
  Drupal.behaviors.ifCE = { //the name of our behavior
    attach: function (context, settings) {
    var userUID = settings.user.uid;
    //your code...
  }
})(jQuery, Drupal, ResponsiveBootstrapToolkit, drupalSettings);

So if the userUID === 0 then your user is not connected.

anou
  • 260
  • 2
  • 6
2

The "not-logged-in" class doesn't seem to exist in vanilla Drupal 8. But there's "user-logged-in" instead. Here's one line of CSS I'm using to hide the custom "Register" menu item if a user is logged in:

body.user-logged-in a[href="/user/register"] {display: none; }
Marassa
  • 166
  • 1
  • 6
0

I checked if the element #toolbar-administration exists since Drupal 10.

let isLoggedIn = jQuery("#toolbar-administration").length === 1;
Thomas
  • 76
  • 8