Laravel Module Generator

v 1.3.*

🔐 Authentication & User Management

Note: Please configure your .env DB connection before generating authentication module.

Quick Start

Generate a complete authentication system with a single command:

php artisan auth:generate

Available Options:

php artisan auth:generate --force                      # Overwrite existing files
php artisan auth:generate --skip-roles                 # Skip roles and permissions
php artisan auth:generate --skip-email-verification    # Skip email verification
php artisan auth:generate --with-social-login          # Include social authentication

📦 Basic Authentication

Setup Instructions

1. Install Authentication Package and Configure

⚠️ Note: You can use either Sanctum or Passport for authentication.

Install Laravel Sanctum (if not already installed):

composer require laravel/sanctum
php artisan vendor:publish --provider="Laravel\Sanctum\SanctumServiceProvider"
php artisan migrate

Configuration:

Ensure Sanctum's middleware is added to your bootstrap/app.php:

->withMiddleware(function (Middleware $middleware): void {
    $middleware->statefulApi();
})

Update User Model:

use Laravel\Sanctum\HasApiTokens;

class User extends Authenticatable
{
    use HasApiTokens, HasFactory, Notifiable;
    // ...
}

Install Laravel Passport (if not already installed):

composer require laravel/passport
php artisan vendor:publish --tag=passport-migrations
php artisan vendor:publish --tag=passport-config
php artisan migrate

Generate Passport Client Credentials:

php artisan passport:client --personal
# Or for password grant:
php artisan passport:client --password

Update .env:

PASSPORT_PASSWORD_CLIENT_ID=**********
PASSPORT_PASSWORD_CLIENT_SECRET=**********

Update config/passport.php:

return [
    'password_client_id' => env('PASSPORT_PASSWORD_CLIENT_ID'),
    'password_client_secret' => env('PASSPORT_PASSWORD_CLIENT_SECRET'),
];

Update App\Providers\AppServiceProvider:

public function boot()
{
    if (class_exists(\Laravel\Passport\Passport::class)) {
        \Laravel\Passport\Passport::enablePasswordGrant();
        
        \Laravel\Passport\Passport::tokensExpireIn(now()->addHours(72));
        \Laravel\Passport\Passport::refreshTokensExpireIn(now()->addDays(7));
    }
}

Update User Model:

use Laravel\Passport\HasApiTokens;

class User extends Authenticatable
{
    use HasApiTokens, HasFactory, Notifiable;
    // ...
}

2. Update .env configuration:

AUTH_GUARD='api'
FRONTEND_URL=http://localhost:5173

3. Configure config/app.php:

'frontend_url' => env('FRONTEND_URL', 'http://localhost:3000'),

4. Update config/auth.php for Sanctum API:

'guards' => [
    'api' => [
        'driver' => 'sanctum',
        'provider' => 'users',
        'hash' => false,
    ],
],
'guards' => [
    'api' => [
        'driver' => 'passport',
        'provider' => 'users',
        'hash' => false,
    ],
],

5. Register Routes in routes/api.php:

// Authentication routes (public)
require __DIR__.'/api/auth.php';

// Access control routes (protected)
require __DIR__.'/api/access-control.php';

6. Configure Mail settings in .env for password reset:

MAIL_MAILER=smtp
MAIL_HOST=smtp.mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=your_username
MAIL_PASSWORD=your_password
MAIL_ENCRYPTION=tls
MAIL_FROM_ADDRESS=noreply@yourapp.com
MAIL_FROM_NAME="${APP_NAME}"

👥 User Management

Setup Instructions

User management endpoints are automatically available once authentication is set up. No additional configuration required beyond the basic authentication setup.


🛡️ Roles & Permissions (Optional)

Note: Generated only if you don't use --skip-roles flag

Setup Instructions

1. Update User Model to include roles trait:

use Laravel\Sanctum\HasApiTokens;
use Spatie\Permission\Traits\HasRoles;

class User extends Authenticatable
{
    use HasApiTokens, HasFactory, Notifiable, HasRoles;
    
    // ... rest of your model
}

2. Register access control routes in routes/api.php:

// Roles & Permissions routes (protected)
require __DIR__.'/api/access-control.php';

3. Include seeders in database/seeders/DatabaseSeeder.php:

public function run()
{
    $this->call([
        PermissionSeeder::class,
        UserTableSeeder::class,
    ]);
}

4. Run migrations and seeders:

php artisan migrate
php artisan db:seed

🌐 Social Authentication (Optional)

Note: Generated only if you use --with-social-login flag

Supported Providers

  • Google
  • Facebook
  • GitHub
  • and more...

Setup Instructions

1. Configure social providers in config/services.php:

'google' => [
    'client_id' => env('GOOGLE_CLIENT_ID'),
    'client_secret' => env('GOOGLE_CLIENT_SECRET'),
    'redirect' => env('GOOGLE_CALLBACK_URL'),
],
'facebook' => [
    'client_id' => env('FACEBOOK_CLIENT_ID'),
    'client_secret' => env('FACEBOOK_CLIENT_SECRET'),
    'redirect' => env('FACEBOOK_CALLBACK_URL'),
],
'github' => [
    'client_id' => env('GITHUB_CLIENT_ID'),
    'client_secret' => env('GITHUB_CLIENT_SECRET'),
    'redirect' => env('GITHUB_CALLBACK_URL'),
],

2. Add credentials to .env:

# Google
GOOGLE_CLIENT_ID=your_google_client_id
GOOGLE_CLIENT_SECRET=your_google_client_secret
GOOGLE_CALLBACK_URL="${APP_URL}/api/auth/social/google/callback"

# Facebook
FACEBOOK_CLIENT_ID=your_facebook_client_id
FACEBOOK_CLIENT_SECRET=your_facebook_client_secret
FACEBOOK_CALLBACK_URL="${APP_URL}/api/auth/social/facebook/callback"

# GitHub
GITHUB_CLIENT_ID=your_github_client_id
GITHUB_CLIENT_SECRET=your_github_client_secret
GITHUB_CALLBACK_URL="${APP_URL}/api/auth/social/github/callback"

3. Register social auth routes in routes/api.php:

// Social authentication routes
require __DIR__.'/api/social-auth.php';

4. Frontend Implementation:

Check the React App Example for frontend social auth implementation reference.


📝 Additional Notes

File Replacement Handling

When generating authentication files, if a file already exists:

  • You'll be prompted to confirm replacement
  • Use --force flag to automatically overwrite all files
  • Skip files individually when prompted

Port Configuration

If you're using a different port for your frontend, update the FRONTEND_URL in .env accordingly. Common ports:

  • Nuxt 3: http://localhost:3000
  • Vite/React: http://localhost:5173
  • Next.js: http://localhost:3000