Beveiliging Code snippets Plugins

Cross site authenticatie voorkomen voor gebruikers op WordPress multisite

Ik ben op dit moment bezig met een applicatie die deels werkt met het authenticeren van gebruikers op basis van het domein waarmee ze inloggen: verschillende gebruikers kunnen bij een account horen, en de applicatie can controleren of de gebruiker bij een account hoort op basis van het domein.

WordPress Multisite is erg geschikt hiervoor. Er is alleen één ding dat hierbij niet zo handig is: WordPress beschouwt je als zijnde ingelogd op elk deel van het netwerk, ook als je alleen maar lid bent van een van de subsites.

Om cross-site login te voorkomen heb ik wat code toegevoegd die op elke request uitgevoerd wordt op de authenticate hook. Het is een vrij simpel stukje code: het controleert of de ingelogde gebruiker lid is van het huidige blog. Zo niet, dan word je uitgelogd en naar het netwerk site_url geredirect.

add_action('authenticate', array($this, 'validate_on_login'), 100, 3);

function validate_on_login(){
  if (!is_user_logged_in()) {
     return;
  }

  $user = wp_get_current_user();

  //allow only login if user is member of this blog

  if (!is_user_member_of_blog( $user->ID, get_current_blog_id() ) && !is_super_admin( $user->ID )) {
    wp_logout();
    wp_redirect(network_site_url());exit();
  }

}

Related Articles

Laat een reactie achter