Drupal 8 development: redirect alle uitgelogde bezoekers naar de login pagina

22 jun 2017

Joris Snoek - Project lead
Vragen? Let me know!
020 - 261 14 99

We zijn momenteel bezig met het productie van een realtime messaging platform in Drupal en NodeJS, zie het als ‘WhatsApp for business’. Dit Drupal systeem fungeert als web app; inloggen is verplicht. Hoe zorg je in Drupal 8 ervoor dat uitgelogde bezoekers móeten inloggen voordat ze verder kunnen?

Drupal kent veel functies out of the box en heeft een krachtige API, maar omdat het veel functies kent zijn er ook veel paden standaard beschikbaar voor anonieme bezoekers. We willen dus alle paden onbereikbaar maken, totdat je inlogt.

Dat betekent dat bezoekers altijd ‘ge-redirect’ worden naar het login scherm zolang ze niet ingelogd zijn. Je wilt namelijk niet dat een anonieme user op bijvoorbeeld de homepage met intern nieuws kan komen.

URL’s redirecten in Drupal 8

We willen dus alle paden in Drupal 8 onbeschikbaar maken voor niet-ingelogde bezoekers, behalve de pagina’s die wij expliciet aangeven zoals:

  • login (/user)
  • wachtwoord vergeten (/user/password)
  • login link (user/reset/login)

In Drupal 7 kon je daar de module logintoboggan gebruiken. Ook kon je dit makkelijk afvangen in hook_init() of hook_boot() in een custom Drupal 7 module.

Zoektochtje

Dit was nog een aardige puzzle, we vonden al snel enkele voorbeelden maar kwamen veel uitzonderingen tegen. Het werkt telkens niet exact zoals wij dat wilden. Dit voorbeeld was de meest nuttige.

Implementatie in Drupal 8

Uiteindelijk kregen we het werkend met behulp van de volgende code in een custom Drupal 8 module:

services.yml

Plaats deze file in je module root, format yourmodulename.services.yml:

RedirectAnonymousSubscriber.php

Plaats de file RedirectAnonymousSubscriber.php in map /src/EventSubscriber/ en doe your custom thing:

Deze code haakt in op de EventSubscriber van Symfony, het framework waar Drupal 8 op gebouwd is.

Wrap up

Alright, that’s it. Ik hoop dat bovenstaande je helpt om uitgelogde bezoekers áltijd naar de login pagina te verwijzen. Vragen of feedback? Let me know.

Nóg meer
kennis nodig?

Check ons ons blog archief.

Digitale strategie en realisatie

Bel ons op 020 - 261 14 99, mail op hallo@luciuswebsystems.nl, of stuur een bericht: