---
title: Middleware Configuration
description: Middleware Configuration..
extends: _layouts.documentation
section: content
---

# Middleware Configuration {#middleware-configuration}

## Header or query parameter based identification {#header-or-query-parameter-based-identification}

To identify tenants using request headers or query parameters, you may use the `InitializeTenancyByRequestData` middleware.

Create a **central** route (don't apply the `tenancy` middleware group on it and don't put it into `routes/tenant.php`) and apply this middleware on the route:

```php
\Stancl\Tenancy\Middleware\InitializeTenancyByRequestData::class
```

To customize the header, query parameter, and `onFail` logic, you may do this in your `AppServiceProvider::boot()`:

```php
// use Stancl\Tenancy\Middleware\InitializeTenancyByRequestData::class;

$this->app->bind(InitializeTenancyByRequestData::class, function ($app) {
    return new InitializeTenancyByRequestData('header name', 'query parameter', function ($exception) {
        // return redirect()->route('foo');
    });
});
```

To disable identification using header or query parameter, set the respective parameter to `null`.

## Customizing the onFail logic {#customizing-the-onfail-logic}

When a tenant route is visited and the tenant can't be identified, an exception is thrown. If you want to change this behavior, to a redirect for example, add this to your `app/Providers/AppServiceProvider.php`'s `boot()` method:

```php
// use Stancl\Tenancy\Middleware\InitializeTenancy;

$this->app->bind(InitializeTenancy::class, function ($app) {
    return new InitializeTenancy(function ($exception, $request, $next) {
        // return redirect()->route('foo');
    });
});
```
