PHP code example of ra-devs / jwt-auth

1. Go to this page and download the library: Download ra-devs/jwt-auth library. Choose the download type require.

2. Extract the ZIP file and open the index.php.

3. Add this code to the index.php.
    
        
<?php
require_once('vendor/autoload.php');

/* Start to develop here. Best regards https://php-download.com/ */

    

ra-devs / jwt-auth example snippets




return [
    'defaults' => [
        'guard' => 'api',
        'passwords' => 'users',
    ],

    'guards' => [
        'api' => [
            'driver' => 'jwt',
            'provider' => 'users',
        ],
    ],

    'providers' => [
        'users' => [
            'driver' => 'eloquent',
            'model' => App\Models\User::class,
        ],
    ],
];

'route' => [
    'prefix' => 'api/auth',        // API route prefix
    'middleware' => ['api'],        // Middleware groups
],

'refresh_cookie' => [
    'name' => env('RA_JWT_AUTH_REFRESH_COOKIE_NAME', 'refresh_token'),
    'minutes' => env('RA_JWT_AUTH_REFRESH_COOKIE_MINUTES', 60 * 24), // 1 day
    'secure' => env('RA_JWT_AUTH_REFRESH_COOKIE_SECURE', null),     // null = auto-detect
    'http_only' => env('RA_JWT_AUTH_REFRESH_COOKIE_HTTP_ONLY', true),
    'same_site' => env('RA_JWT_AUTH_REFRESH_COOKIE_SAME_SITE', null), // 'lax'|'strict'|'none'
    'path' => env('RA_JWT_AUTH_REFRESH_COOKIE_PATH', '/'),
    'domain' => env('RA_JWT_AUTH_REFRESH_COOKIE_DOMAIN', null),
],

'classes' => [
    'user_model' => App\Models\User::class,
    'user_resource' => App\Http\Resources\UserResource::class,
    'auth_repository_interface' => RaDevs\JwtAuth\Repositories\Contracts\IAuthRepository::class,
    'auth_repository' => App\Repositories\CustomAuthRepository::class,
    'user_repository_interface' => RaDevs\JwtAuth\Repositories\Contracts\IUserRepository::class,
    'user_repository' => App\Repositories\CustomUserRepository::class,
    'password_reset_service' => RaDevs\JwtAuth\Services\PasswordResetCodeService::class,
    'notification' => App\Notifications\CustomResetPasswordNotification::class,
],

'registration' => [
    'fields' => [
        'email' => 't_name' => 'password' => 'om_create' => [
        'password_confirmation',
    ],
],

'password_reset' => [
    'code_length' => env('RA_JWT_AUTH_PASSWORD_RESET_CODE_LENGTH', 8),
    'code_alphabet' => env('RA_JWT_AUTH_PASSWORD_RESET_CODE_ALPHABET', 'ABCDEFGHJKLMNPQRSTUVWXYZ23456789'),
    'max_attempts' => env('RA_JWT_AUTH_PASSWORD_RESET_MAX_ATTEMPTS', 5),
    'rate_limit_seconds' => env('RA_JWT_AUTH_PASSWORD_RESET_RATE_LIMIT_SECONDS', 60),
],

'rate_limits' => [
    'login' => env('RA_JWT_AUTH_RATE_LIMIT_LOGIN', 5),
    'register' => env('RA_JWT_AUTH_RATE_LIMIT_REGISTER', 3),
    'forgot_password' => env('RA_JWT_AUTH_RATE_LIMIT_FORGOT_PASSWORD', 3),
    'reset_password' => env('RA_JWT_AUTH_RATE_LIMIT_RESET_PASSWORD', 3),
    'refresh' => env('RA_JWT_AUTH_RATE_LIMIT_REFRESH', 10),
],


// app/Http/Resources/UserResource.php

namespace App\Http\Resources;

use Illuminate\Http\Resources\Json\JsonResource;

class UserResource extends JsonResource
{
    public function toArray($request): array
    {
        return [
            'id' => $this->id,
            'name' => $this->name,
            'email' => $this->email,
            'avatar' => $this->avatar_url,
            'created_at' => $this->created_at->toIso8601String(),
        ];
    }
}

'classes' => [
    'user_resource' => App\Http\Resources\UserResource::class,
],


// app/Repositories/CustomAuthRepository.php

namespace App\Repositories;

use RaDevs\JwtAuth\Repositories\AuthRepository;
use RaDevs\JwtAuth\Repositories\Contracts\IAuthRepository;

class CustomAuthRepository extends AuthRepository implements IAuthRepository
{
    public function login(array $credentials): array
    {
        // Add custom logic before login
        // e.g., check user status, log attempts, etc.
        
        $result = parent::login($credentials);
        
        // Add custom logic after login
        // e.g., update last login, send notification, etc.
        
        return $result;
    }
}


// app/Notifications/CustomResetPasswordNotification.php

namespace App\Notifications;

use RaDevs\JwtAuth\Notifications\ApiResetPasswordCodeNotification;

class CustomResetPasswordNotification extends ApiResetPasswordCodeNotification
{
    public function toMail($notifiable)
    {
        return (new \Illuminate\Notifications\Messages\MailMessage)
            ->subject('Reset Your Password')
            ->view('emails.password-reset', [
                'code' => $this->code,
                'user' => $notifiable,
            ]);
    }
}


// app/Providers/EventServiceProvider.php

use RaDevs\JwtAuth\Events\UserLoggedIn;
use RaDevs\JwtAuth\Events\UserLoginFailed;

protected $listen = [
    UserLoggedIn::class => [
        SendLoginNotification::class,
        UpdateLastLoginTimestamp::class,
    ],
    UserLoginFailed::class => [
        LogFailedAttempt::class,
    ],
];


// app/Models/User.php

use Tymon\JWTAuth\Contracts\JWTSubject;

class User extends Authenticatable implements JWTSubject
{
    public function getJWTIdentifier()
    {
        return $this->getKey();
    }

    public function getJWTCustomClaims()
    {
        return [];
    }
}


// app/Http/Requests/CustomRegisterRequest.php

namespace App\Http\Requests;

use RaDevs\JwtAuth\Http\Requests\Auth\RegisterRequest;

class CustomRegisterRequest extends RegisterRequest
{
    public function rules(): array
    {
        $rules = parent::rules();
        
        // Add custom rules
        $rules['email'] .= '|unique:users,email,deleted_at,NULL';
        $rules['terms'] = '

// In your RouteServiceProvider or routes file
Route::prefix('api/auth')
    ->middleware(['api', 'throttle:60,1'])
    ->group(function () {
        // Your custom routes
    });
bash
# Publish JWT config
php artisan vendor:publish --provider="Tymon\JWTAuth\Providers\LaravelServiceProvider"

# Generate JWT secret key
php artisan jwt:secret
bash
php artisan migrate