s3tech/laravel-auth-kit
Composer 安装命令:
composer require s3tech/laravel-auth-kit
包简介
Package Laravel plug-and-play : auth Sanctum, OTP reset, rôles Spatie, logs d'activité.
README 文档
README
Package Laravel plug-and-play pour les projets API.
Installez-le et tout est prêt : authentification, profil, réinitialisation OTP, rôles, et logs d'activité.
📦 Fonctionnalités
| Fonctionnalité | Détail |
|---|---|
| Authentification | Sanctum — login, logout multi-mode, /me |
| Sessions | Liste des appareils connectés, révocation ciblée |
| Inscription | Mode self (autonome) ou mode admin (habilité + mot de passe temporaire par email) |
| Profil | Champs optionnels, liste configurable, statut non modifiable |
| Mot de passe | Changement (propre) / modification par admin interdite |
| Réinitialisation | Flux OTP 3 étapes (email → code → reset) |
| Rôles & Permissions | Spatie Laravel Permission — CRUD complet |
| Logs d'activité | IP, appareil, OS, navigateur, géolocalisation GPS |
🚀 Installation
1. Ajouter le package
composer require s3tech/laravel-auth-kit
En développement local (path repository) :
"repositories": [{ "type": "path", "url": "../laravel-auth-kit" }], "require": { "s3tech/laravel-auth-kit": "*" }
2. Publier la configuration
php artisan vendor:publish --tag=auth-kit-config
3. Publier et exécuter les migrations
# Sanctum php artisan vendor:publish --provider="Laravel\Sanctum\SanctumServiceProvider" # Spatie php artisan vendor:publish --provider="Spatie\Permission\PermissionServiceProvider" # Auth Kit php artisan vendor:publish --tag=auth-kit-migrations php artisan migrate
4. Configurer le modèle User
<?php // app/Models/User.php namespace App\Models; use Illuminate\Foundation\Auth\User as Authenticatable; use Laravel\Sanctum\HasApiTokens; use Spatie\Permission\Traits\HasRoles; use S3Tech\AuthKit\Traits\HasAuthKit; class User extends Authenticatable { use HasApiTokens, HasRoles, HasAuthKit; protected $fillable = ['first_name', 'last_name', 'phone', 'email', 'password', 'must_change_password', 'status']; protected $hidden = ['password', 'remember_token']; }
5. Guard Sanctum pour Spatie
Dans config/permission.php :
'guard_name' => 'sanctum',
Dans config/auth.php, s'assurer que le guard existe :
'guards' => [ 'sanctum' => ['driver' => 'sanctum', 'provider' => 'users'], ],
6. Créer le seeder de rôles initiaux
// database/seeders/RoleSeeder.php use Spatie\Permission\Models\Role; use Spatie\Permission\Models\Permission; // Rôles Role::firstOrCreate(['name' => 'super-admin', 'guard_name' => 'sanctum']); Role::firstOrCreate(['name' => 'manager', 'guard_name' => 'sanctum']); Role::firstOrCreate(['name' => 'user', 'guard_name' => 'sanctum']); // Permissions $permissions = ['manage-roles', 'create-user', 'update-user']; foreach ($permissions as $perm) { Permission::firstOrCreate(['name' => $perm, 'guard_name' => 'sanctum']); } // Assigner toutes les permissions au super-admin Role::findByName('super-admin', 'sanctum')->givePermissionTo($permissions);
⚙️ Configuration (config/auth-kit.php)
return [ 'route_prefix' => 'api', 'route_middleware' => ['api'], 'user_model' => \App\Models\User::class, 'token' => ['name' => 'auth_token'], 'otp' => [ 'length' => 6, 'expires_in' => 10, // minutes ], 'password_rules' => ['min:8'], 'messages' => [ 'default_locale' => 'en', 'supported_locales' => ['en', 'fr'], ], 'registration' => [ 'mode' => 'self', // 'self' | 'admin' — mutuellement exclusifs 'default_role' => 'user', ], 'profile' => [ // Champs modifiables via PUT /profile et PUT /users/{user} // Ajouter 'phone', 'avatar'… selon votre table users 'editable_fields' => ['first_name', 'last_name', 'email', 'phone'], ], 'activity_log' => [ 'enabled' => true, 'retention_days' => 90, // null = indéfini 'log_events' => [ 'register' => true, 'login' => true, 'logout' => true, 'login_failed' => true, 'profile_updated' => true, 'password_changed' => true, 'password_reset' => true, 'otp_requested' => true, 'admin_created_user' => true, 'role_assigned' => true, 'role_revoked' => true, ], ], 'permissions' => [ 'manage_roles' => 'manage-roles', 'create_user' => 'create-user', 'update_other_user' => 'update-user', ], ];
🌍 Messages API bilingues
Toutes les réponses textuelles du package sont maintenant bilingues anglais/français.
messageouerrorretourne la langue résolue- l'anglais est utilisé par défaut
message_translationsouerror_translationsexpose les versionsenetfr- les erreurs de validation des
FormRequestsuivent aussi ce fonctionnement errorsretourne les messages de validation dans la langue résolueerrors_translationsexpose les variantesenetfr
Ordre de résolution de la langue :
- Header
X-Auth-Kit-Locale - Query string
?lang=fr - Header
Accept-Language config('auth-kit.messages.default_locale')
Exemple de réponse succès :
{
"message": "Role 'manager' assigned to user #12.",
"locale": "en",
"message_translations": {
"en": "Role 'manager' assigned to user #12.",
"fr": "Rôle 'manager' assigné à l'utilisateur #12."
}
}
Exemple pour forcer le français :
POST /api/users/12/roles?lang=fr X-Auth-Kit-Locale: fr
Exemple de réponse de validation :
{
"error": "Les donnees fournies sont invalides.",
"locale": "fr",
"error_translations": {
"en": "The given data was invalid.",
"fr": "Les donnees fournies sont invalides."
},
"errors": {
"email": [
"Le champ adresse e-mail est obligatoire."
]
},
"errors_translations": {
"en": {
"email": [
"The email address field is required."
]
},
"fr": {
"email": [
"Le champ adresse e-mail est obligatoire."
]
}
}
}
🛣️ Routes disponibles
Publiques
| Méthode | Endpoint | Description | Condition |
|---|---|---|---|
POST |
/api/auth/register |
Inscription autonome | Mode self uniquement |
POST |
/api/auth/login |
Connexion | — |
POST |
/api/auth/forgot-password |
Envoyer OTP | — |
POST |
/api/auth/verify-otp |
Vérifier OTP → reset_token | — |
POST |
/api/auth/reset-password |
Réinitialiser le mot de passe | — |
Protégées (auth:sanctum)
| Méthode | Endpoint | Description |
|---|---|---|
GET |
/api/auth/me |
Utilisateur connecté |
POST |
/api/auth/logout |
Déconnexion (voir modes ci-dessous) |
GET |
/api/auth/sessions |
Liste des sessions actives |
PUT |
/api/profile |
Modifier son propre profil |
PUT |
/api/profile/password |
Changer son mot de passe |
POST |
/api/users |
Créer un utilisateur (permission create-user) |
PUT |
/api/users/{user} |
Modifier le profil d'un user (permission update-user) |
GET |
/api/activity-logs/me |
Mes logs d'activité |
GET |
/api/activity-logs/user/{user} |
Logs d'un user (permission manage-roles) |
GET |
/api/activity-logs |
Tous les logs (permission manage-roles) |
Administration rôles (permission manage-roles)
| Méthode | Endpoint | Description |
|---|---|---|
GET/POST |
/api/roles |
Lister / Créer un rôle |
DELETE |
/api/roles/{role} |
Supprimer un rôle |
GET/POST |
/api/permissions |
Lister / Créer une permission |
POST |
/api/roles/{role}/permissions |
Assigner permission → rôle |
DELETE |
/api/roles/{role}/permissions/{perm} |
Révoquer permission d'un rôle |
POST |
/api/users/{user}/roles |
Assigner rôle → utilisateur |
DELETE |
/api/users/{user}/roles/{role} |
Révoquer rôle d'un utilisateur |
🔌 Modes de déconnexion
// Session courante uniquement (défaut) { "mode": "current" } // Une session précise (visible via GET /auth/sessions) { "mode": "specific", "token_id": 12 } // Toutes les sessions (déconnexion totale) { "mode": "all" }
👤 Modes d'inscription
Mode self (défaut)
L'utilisateur s'inscrit via POST /api/auth/register avec son propre mot de passe.
La route est publique.
Mode admin
POST /api/auth/registerest désactivée- Seul un utilisateur avec la permission
create-userpeut créer des comptes viaPOST /api/users - Un mot de passe temporaire est généré et envoyé par email
- L'utilisateur devra changer son mot de passe à la première connexion (
must_change_password = true)
📊 Logs d'activité
Données collectées par action
{
"id": 42,
"user_id": 7,
"event": "profile_updated",
"action": "update",
"subject_type": "App\\Models\\User",
"subject_id": 12,
"subject": {
"type": "App\\Models\\User",
"id": 12,
"label": "Jane Doe"
},
"ip_address": "41.82.12.45",
"device_type": "mobile",
"device_name": "Android — Chrome",
"browser": "Chrome",
"os": "Android",
"country": "Senegal",
"country_code": "SN",
"region": "Dakar",
"city": "Dakar",
"latitude": 14.6928,
"longitude": -17.4467,
"metadata": null,
"created_at": "2024-11-20T14:32:11.000000Z"
}
Vous pouvez aussi journaliser n'importe quel modèle Eloquent de votre application comme ressource cible:
$this->logger->log($request, 'budget_updated', auth()->id(), 'update', $budget, [ 'updated_fields' => ['amount', 'status'], ]);
Dans ce cas, la liste des logs retournera automatiquement subject_type, subject_id et un objet subject compact pour identifier la ressource concernée (Budget, Project, Invoice, etc.).
Filtres disponibles (query string)
GET /api/activity-logs?event=login&from=2024-01-01&to=2024-12-31&per_page=50
🏗️ Arborescence du package
laravel-auth-kit/
├── composer.json
├── README.md
├── database/
│ └── migrations/
│ ├── ..._create_password_reset_otps_table.php
│ └── ..._create_activity_logs_table.php
├── resources/
│ └── views/emails/
│ ├── otp.blade.php Email code OTP
│ └── temporary-password.blade.php Email mot de passe temporaire (mode admin)
└── src/
├── AuthKitServiceProvider.php
├── Config/
│ └── auth-kit.php
├── Http/
│ ├── Controllers/
│ │ ├── AuthController.php login, register, logout, me, sessions, adminCreateUser
│ │ ├── ProfileController.php updateOwnProfile, updateOwnPassword, updateUserProfile
│ │ ├── PasswordResetController.php sendOtp, verifyOtp, resetPassword
│ │ ├── RolePermissionController.php CRUD rôles/permissions + assignations
│ │ └── ActivityLogController.php myLogs, userLogs, allLogs
│ ├── Requests/
│ │ ├── LoginRequest.php
│ │ ├── RegisterRequest.php
│ │ ├── AdminCreateUserRequest.php
│ │ ├── UpdateProfileRequest.php
│ │ ├── AdminUpdateUserProfileRequest.php
│ │ ├── UpdatePasswordRequest.php
│ │ └── ResetPasswordRequest.php
│ └── Resources/
│ └── UserResource.php
├── Mail/
│ ├── OtpMail.php
│ └── TemporaryPasswordMail.php
├── Models/
│ ├── PasswordResetOtp.php
│ └── ActivityLog.php
├── Routes/
│ └── api.php
├── Services/
│ └── ActivityLogService.php Cœur du système de logs
└── Traits/
└── HasAuthKit.php À ajouter sur App\Models\User
📄 Licence
MIT
s3tech/laravel-auth-kit 适用场景与选型建议
s3tech/laravel-auth-kit 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 96 次下载、GitHub Stars 达 0, 最近一次更新时间为 2026 年 03 月 09 日, 在 PHP 生态内属于活跃度较高的组件。
它主要适用于以下技术方向: 「auth」 「laravel」 「otp」 「roles」 「permissions」 「activity-log」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。
我们在过去多个企业项目中使用过 s3tech/laravel-auth-kit 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 s3tech/laravel-auth-kit 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
与 s3tech/laravel-auth-kit 相关的其它包
同方向 / 同关键字的高下载量 PHP Composer 包推荐,方便对比选型:
Laravel Multiauth package
A lightweight and powerful OAuth 2.0 authorization and resource server library with support for all the core specification grants. This library will allow you to secure your API with OAuth and allow your applications users to approve apps that want to access their data from your API.
This package provides a flexible way to add Role-based Permissions to Laravel 6.x
Email Toolkit Plugin for CakePHP
OTP generating package
OTP generating package
统计信息
- 总下载量: 96
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 0
- 点击次数: 28
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2026-03-09