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