customergauge/cognito

AWS Cognito provider for Laravel Authentication

1.4.0 2023-04-26 15:32 UTC

This package is auto-updated.

Last update: 2024-03-26 17:24:13 UTC


README

Build Code Coverage Scrutinizer Code Quality

Laravel Cognito Provider 🔑

This library provides a CognitoUserProvider for Laravel.

Installation

composer require customergauge/cognito

Usage

Auth configuration

In the auth.php file, add the following settings:

Default Guard

    'defaults' => [
        'guard' => 'cognito-token',
        'passwords' => 'users',
    ],

The new Guard configuration

    'guards' => [
        'cognito-token' => [
            'driver' => 'token',
            'provider' => 'cognito-provider',
            'storage_key' => 'cognito_token',
            'hash' => false,
        ],
    ],

The User Provider configuration

    'providers' => [
        'cognito-provider' => [
            'driver' => \CustomerGauge\Cognito\CognitoUserProvider::class,
        ],
    ],

Cognito Environment Variables

    /*
    |--------------------------------------------------------------------------
    | Cognito Custom Configuration
    |--------------------------------------------------------------------------
    |
    | The following configuration is not part of standard Laravel application.
    | We use it to configure the CognitoUserProvider process so that we can
    | properly validate the JWT token provided by AWS Cognito.
    |
    */

    'cognito' => [
        'pool' => env('AWS_COGNITO_USER_POOL_ID'),
        'region' => env('AWS_COGNITO_USER_POOL_REGION'),
    ],

Auth Middleware

Configure the auth middleware at App\Http\Kernel with 'auth:cognito-token'

UserFactory

The last thing you'll need is to provide your own implementation of UserFactory and register it in a ServiceProvider.

final class CognitoUserFactory implements UserFactory
{
    public function make(array $payload): ?Authenticatable
    {
        return new MyUserObject(
            $payload['username'],
            $payload['custom:my_custom_cognito_attribute'],
        );
    }
}

In the provider:

$this->app->bind(CustomerGauge\Cognito\Contracts\UserFactory, App\Auth\CognitoUserFactory::class);