creode/laravel-account-approval

A Laravel package which provides basic functionality for users to require account approval after registration.

1.1.0 2024-01-12 16:00 UTC

README

Latest Version on Packagist GitHub Tests Action Status GitHub Code Style Action Status Total Downloads

A Laravel package which provides basic functionality for users to require account approval after registration.

Installation

You can install the package via composer:

composer require creode/laravel-account-approval

Migrations

You can publish and run the migrations with:

php artisan vendor:publish --tag="account-approval-migrations"
php artisan migrate

Configuration

You can publish the config file with:

php artisan vendor:publish --tag="account-approval-config"

Thie following options are available in the config file:

  • users_table - The name of the users table in the database. Defaults to users.
  • account_not_verified_message - The message shown flashed to session when an account is not verified. Defaults to Your account has not been verified. Please check your email for a verification link..

Middleware

In order to prevent users from accessing the site until they have been approved, the AccountActivated middleware should be added to the web middleware group in app/Http/Kernel.php:

protected $middlewareGroups = [
    'web' => [
        // ...
        \Creode\LaravelAccountApproval\Http\Middleware\AccountActivated::class,
    ],
    // ...
];

This middleware will run on every request, detect if the user is logged in and if they are not approved, redirect them to the login route. This route can be configured in the config/account-approval.php file.

Extending Middleware

If you need to execute some custom functionality for the current website you can extend the AccountActivated middleware and override the accountNotActivated method. This will allow you to execute your custom functionality. The unverifiedAccountRedirect function can also be overridden to allow you to redirect to a custom route and set your own messaging/functionality.

namespace App\Http\Middleware;

use Closure;
use Creode\LaravelAccountApproval\Http\Middleware\AccountActivated as BaseAccountActivated;

class AccountActivated extends BaseAccountActivated
{
    /**
     * Handle a failed activation.
     *
     * @param \Illuminate\Http\Request  $request
     * @param \Closure  $next
     *
     * @return mixed
     */
    protected function accountNotActivated(Request $request, Closure $next)
    {
        // Your custom functionality here
    }

    /**
     * Redirect which will happen if the user is not activated.
     *
     * Return null to continue with the request.
     *
     * @param Request $request
     * @param Closure $next
     *
     * @return Response|null
     */
    protected function unverifiedAccountRedirect(Request $request, Closure $next): ?Response
    {
        // Your custom functionality here
    }
}

Usage

Following package installation, running the migrations command will add an activated column to the users table. This defaults to false for all users. It is assumed this is the best configuration to get a site up and running quickly.

Alternatively, running the seeder provided in this module will set all existing users to be approved. This can be run with the following command:

php artisan db:seed --class="Creode\LaravelAccountApproval\Database\Seeders\AccountApprovalSeeder"

This will resolve the default authentication model and set the activated flag to true for all users.

Testing

composer test

Changelog

Please see CHANGELOG for more information on what has changed recently.

Contributing

Please see CONTRIBUTING for details.

Security Vulnerabilities

Please review our security policy on how to report security vulnerabilities.

Credits

License

The MIT License (MIT). Please see License File for more information.