Puncte:1

Cum pot forța deconectarea utilizatorului dintr-o bibliotecă JavaScript într-un modul personalizat?

drapel in

Am scris un modul personalizat pentru Drupal 8 pentru a monitoriza frecvent locația dispozitivului utilizatorului. Dacă un utilizator iese dintr-o limită de zonă permisă, trebuie să forțez deconectarea utilizatorului de pe site. Am creat următoarele fișiere în folderul modulului (test_gps):

  1. Fişier gps_test.info.yml
  2. Fişier gps.js: program JavaScript pentru a monitoriza locația GPS a dispozitivului utilizatorului.
  3. Fişier gps_test.libraries.yml: Conține gps.js bibliotecă.
  4. Fişier gps_test.module: implementează un cârlig pentru a atașa biblioteca JavaScript la fiecare încărcare a paginii.
funcția gps_test_page_attachments(array &$page) {
  $page['#attached']['library'][] = 'gps_test/gps';
}

Cum pot forța utilizatorul să fie deconectat (sau să împiedic utilizatorul să folosească site-ul web) de la gps.js bibliotecă?

Puncte:4
drapel de

După cum a menționat @Tushar, puteți utiliza user_logout() funcţie.

Cel mai simplu mod pe care îl văd este să vă deconectați utilizatorul cu un apel AJAX atunci când JS detectează că utilizatorul trebuie să fie deconectat. Iată un exemplu de bază despre cum se poate face.

În JS-ul dvs., trebuie să adăugați:

Drupal.behaviors.logout= {
  atașați: funcție(context, setări) {
    if(yourConditionToLogOutUserisMet) {
      $.ajax({
        url: "/log-me-out", // traseu personalizat pentru a deconecta utilizatorul curent
        succes: function(data) {
          // faceți tot ce doriți pentru succesul apelului dvs. ajax
        }
      });
    }
  }
}

Apoi, creați-vă ruta personalizată în gps_test.routing.yml

gps_test.my_custom_log_out:
  cale: '/log-me-out'
  implicite:
    _controller: „\Drupal\gps_test\Controller\MyLogOutController::logUserOut”
  cerinte:
    _permission: „accesează conținut”

Și, în sfârșit, creați controlerul de rută:

spațiu de nume Drupal\gps_test\Controller;

utilizați Drupal\Core\Controller\ControllerBase;
utilizați Symfony\Component\HttpFoundation\JsonResponse;


clasa MyLogOutController extinde ControllerBase {
  funcția logUserOut() {
    if ($this->currentUser()->isAuthenticated()) {
      user_logout();

      returnează un nou JsonResponse([
        'message' => "Sesiunea curentă a utilizatorului s-a încheiat.",
      ], 200);
    }
  }  
}
leymannx avatar
drapel ne
Apelurile Drupal ar trebui evitate la cursuri. Controlerele au o metodă `currentUser`. `dacă ($this->currentUser()->isAuthenticated()) {`.
drapel cn
De asemenea, nu există permisiunea „vizualizează conținutul publicat” - probabil ați vrut să spuneți „accesați conținutul”.
misterdidi avatar
drapel de
Aveți amândoi dreptate. Mi-am editat răspunsul pentru a ține cont de comentariile tale.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.