---
title: "PSR-14 Events"
manual: "Netresearch SAML Auth"
version: "main"
source: "Developer/Events.rst"
rendered: "2026-10-01T05:49:07+00:00"
---

# PSR-14 Events {#events}

The extension provides PSR-14 events for customizing the authentication
process.

## Available Events {#available-events}

### BeforeUserCreationEvent {#beforeusercreationevent}

Dispatched before a new user is created from SAML attributes.

```php
namespace Netresearch\NrSamlAuth\Event;

final class BeforeUserCreationEvent
{
    public function getSamlAttributes(): array;
    public function getUserData(): array;
    public function setUserData(array $userData): void;
    public function getSettings(): Settings;
}
```

### AfterUserCreationEvent {#afterusercreationevent}

Dispatched after a new user has been created.

```php
namespace Netresearch\NrSamlAuth\Event;

final class AfterUserCreationEvent
{
    public function getUser(): array;
    public function getSamlAttributes(): array;
    public function getSettings(): Settings;
}
```

### BeforeAuthenticationEvent {#beforeauthenticationevent}

Dispatched before authentication is processed.

```php
namespace Netresearch\NrSamlAuth\Event;

final class BeforeAuthenticationEvent
{
    public function getSamlResponse(): Response;
    public function getSettings(): Settings;
    public function setSkipAuthentication(bool $skip): void;
}
```

## Registering Event Listeners {#registering-event-listeners}

Register your event listeners in your extension's `Services.yaml`:

```yaml
# Configuration/Services.yaml
services:
  Vendor\MyExtension\EventListener\CustomUserCreationListener:
    tags:
      - name: event.listener
        identifier: 'myextension/custom-user-creation'
        event: Netresearch\NrSamlAuth\Event\BeforeUserCreationEvent
```

## Example Implementation {#example-implementation}

Custom attribute mapping:

```php
namespace Vendor\MyExtension\EventListener;

use Netresearch\NrSamlAuth\Event\BeforeUserCreationEvent;

final class CustomUserCreationListener
{
    public function __invoke(BeforeUserCreationEvent $event): void
    {
        $attributes = $event->getSamlAttributes();
        $userData = $event->getUserData();

        // Map department to custom field
        if (isset($attributes['department'][0])) {
            $userData['tx_myext_department'] = $attributes['department'][0];
        }

        // Map employee ID
        if (isset($attributes['employeeId'][0])) {
            $userData['tx_myext_employee_id'] = $attributes['employeeId'][0];
        }

        $event->setUserData($userData);
    }
}
```
