2012-04-16 69 views
6

Tôi biết cách kiểm tra xem người dùng có đăng nhập thông qua PHP hay không, nhưng tôi cần thực hiện một số kiểu dáng khi một sự kiện xảy ra và tôi đã tạo một tệp JavaScript riêng cho việc này. Đây có phải là biến Drupal hay thứ gì đó mà tôi có thể tham chiếu không?Làm cách nào để kiểm tra xem người dùng đã đăng nhập vào trang web Drupal thông qua JavaScript chưa?

+1

Bạn đang tạo kiểu trong javascript? Hãy rất cẩn thận về những gì bạn làm trong javascript dựa trên xác thực người dùng. Thật dễ dàng cho bất kỳ ai thao túng JS trên trang của bạn. – Webnet

Trả lời

13

Tạo new custom module bằng cách thực hiện hook_init.

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

Sau đó, trong mã javascript của bạn, hãy kiểm tra giá trị của biến được xác định trong mô-đun user_js_uid.

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

Hope this helps ... Muhammad

+1

'jQuery.cookie (" DRUPAL_UID ");' luôn trả về 'null' – FLY

+2

Không có cookie" DRUPAL_UID "trong 7.12 – jhoff

+0

+1. Tôi đã thêm bản sửa lỗi cho trường hợp này. Cảm ơn. –

11

Nếu bạn đang chờ đợi cho DOM để sẵn sàng và tiêu chuẩn sử dụng tạo ra các lớp học Drupal CSS, bạn có thể làm một cái gì đó tương tự (với jQuery):

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

Bằng cách này bạn không phải thêm thư viện để kiểm tra .. – Haje

+0

Đây là giải pháp tuyệt vời và bạn không cần phải viết mô-đun tùy chỉnh nếu bạn không sử dụng Varnish hoặc tương tự – Bery

+0

Như thế này. Phương pháp này không cần phải viết PHP, chỉ thuần JavaScript. – Sunry

1

Lớp "không đăng nhập" dường như không tồn tại trong vanilla Drupal 8. Nhưng thay vào đó, có "người dùng đăng nhập". Dưới đây là một dòng CSS Tôi đang sử dụng để ẩn các tùy chỉnh "Đăng ký" mục trình đơn nếu người dùng đang đăng nhập:

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

Đối với Drupal 8 nếu bạn sử dụng Drupal.behaviors, bạn có thể truy cập vào UID sử dụng trong cài đặt :

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

Vì vậy, nếu userUID === 0 thì người dùng của bạn chưa được kết nối.

Các vấn đề liên quan