You can install the package via composer. Add the following to composer.json:
{
    "repositories": [
        {
            "type": "vcs",
            "url": "https://github.com/adaptdk/gsv-auth0-provider"
        }
    ]
}Next run the command:
composer require adaptdk/gsv-auth0-providerAdd a custom auth guard by creating the file config/auth.php with the following content:
return [
    'defaults' => [
        'guard' => 'auth0', // The guard name can be anything, it just have to appear in the 'guards' array below
    ],
    'guards' => [
        'auth0' => [
            'driver' => 'gsv-auth0-provider', // The driver name must be exactly this
        ],
    ],
];The file will automatically be loaded by Lumen.
Make the following changes in bootstrap/app.php.
Register the service provider:
$app->register(\Adaptdk\GsvAuth0Provider\GsvAuth0ProviderServiceProvider::class);Enable the authentication middleware:
$app->routeMiddleware([
    'auth' => \Adaptdk\GsvAuth0Provider\Http\Middleware\Auth0Authenticate::class,
]);Apply the middleware to your routes:
$router->group(['middleware' => 'auth'], function ($router) {
    // Your routes here...
});The service provider will be auto-discovered.
Add a custom guard to the 'guards' array in config/auth.php:
return [
    'guards' => [
        'auth0' => [ // The guard name can be anything...
            'driver' => 'gsv-auth0-provider', // ...but the driver name must be exactly this
        ],
    ],
];Enable the authentication middleware where needed:
protected $routeMiddleware = [
    // ...
    'auth' => \Adaptdk\GsvAuth0Provider\Http\Middleware\Auth0Authenticate::class,
    // ...
];Apply the middleware to your routes with the guard name you have configured:
Route::group(['middleware' => ['auth:auth0']], function () {
    // ...
});It is possible to access the current user in the protected routes with:
auth()->user();Or alternatively with the facade:
GsvAuth0Provider::getUser();You can check for permissions by using auth()->user()->can(), for example:
auth()->user()->can('create_post');To load data from the user service (in case you have disabled automatic loading), simply call a method on the facade:
GsvAuth0Provider::loadUserData();Data is now available on the auth()->user() instance.
Add the standard authorization middleware:
$app->routeMiddleware([
    'can' => \Illuminate\Auth\Middleware\Authorize::class,
]);Add the middleware to your routes, for example:
$router->get('/posts', [
    'uses' => 'PostController@index',
    'middleware' => 'can:create_post'
]);Simply change create_post to the name of the required permission.
This is the contents of the config file:
return [
    // Whether to load user data automatically (defaults to 'true')
    'autoload_user' => true,
    // This is the domain for the account in Auth0
    'domain' => env('AUTH0_DOMAIN', 'gsv.eu.auth0.com'),
    // The incoming token must have access to this API (find the API identifier in Auth0)
    'api_identifier' => env('AUTH0_API_IDENTIFIER'),
    // The base URL for the user service
    'user_api_base_url' => env('AUTH0_USER_API'),
    // The URI for the JWKS file (fallback to https://gsv.eu.auth0.com/.well-known/jwks.json)
    'jwks_uri' => null,
];composer test