2012-04-16 20 views
6

Sé cómo comprobar si el usuario ha iniciado sesión a través de PHP, pero necesito hacer un poco de estilo cuando ocurre un evento, y he creado un archivo JavaScript separado para esto. ¿Es esto una variable de Drupal o algo a lo que puedo hacer referencia también?¿Cómo comprobar si un usuario está logged_in en un sitio de Drupal a través de JavaScript?

+1

¿Estás haciendo un estilo en javascript? Tenga mucho cuidado con lo que hace en JavaScript en función de la autenticación del usuario. Es MUY fácil para cualquier persona manipular el JS en su página. – Webnet

Respuesta

13

Crea un new custom module con la implementación hook_init.

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

Luego, en el código JavaScript, cheque por el valor de la variable definida en el módulo user_js_uid.

if(Drupal.settings.user_js_uid == 0) 
{ 
    // execute code for non logged in users 
} 
else 
{ 
    // execute code for logged in users 
} 

Espero que esto ayude ... Muhammad

+1

'jQuery.cookie (" DRUPAL_UID ");' siempre devuelve 'nulo' – FLY

+2

No hay una cookie" DRUPAL_UID "en 7.12 – jhoff

+0

+1. Agregué una solución para este caso. Gracias. –

11

Si usted está esperando el DOM esté listo y el uso estándar generada clases Drupal CSS, usted podría hacer algo así (con jQuery):

if($("body.not-logged-in").length) 
{ 
    // user is not logged in 
} 
+1

De esta manera no tiene que agregar una biblioteca para verificar ... – Haje

+0

Esta es una gran solución y no necesita escribir un módulo personalizado si no está usando barniz o similar – Bery

+0

Como este. Este método no necesita escribir PHP, solo JavaScript puro. – Sunry

1

La clase "not-logged-in" no parece existir en vanilla Drupal 8. Pero en su lugar hay "usuario conectado". Aquí está una línea de CSS que estoy usando para ocultar la costumbre "Registro" del menú si un usuario se registra en:

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

para Drupal 8 si se utiliza Drupal.behaviors, puede acceder a la UID del usuario en entornos :

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

Así que si el userUID === 0 entonces su usuario no está conectado.

Cuestiones relacionadas