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?
Asked
Active
Viewed 1.0k times
9
-
1You'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 Answers
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
-
1
-
2
-
1The second option is good, but note that it only applies if you're not behind Varnish or similar (which in our case is why we're doing something with JS in the first place). – Joshua Stewardson Jan 08 '14 at 19:49
-
to get it from JS use uid = Drupal.settings.user_js_uid. Simply user_js_uid does not work for me in D7 - https://www.drupal.org/node/828916 – Anonymous Aug 06 '14 at 17:36
-
Too complicated to build a custom module. Haje's pure JavaScript method is good. – Sunry Jul 02 '16 at 03:46
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
-
1This 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
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