承接 s3tech/laravel-auth-kit 相关项目开发

从需求分析到上线部署,全程专人跟进,保证项目质量与交付效率

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

s3tech/laravel-auth-kit

最新稳定版本:v1.1.0

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.

  • message ou error retourne la langue résolue
  • l'anglais est utilisé par défaut
  • message_translations ou error_translations expose les versions en et fr
  • les erreurs de validation des FormRequest suivent aussi ce fonctionnement
  • errors retourne les messages de validation dans la langue résolue
  • errors_translations expose les variantes en et fr

Ordre de résolution de la langue :

  1. Header X-Auth-Kit-Locale
  2. Query string ?lang=fr
  3. Header Accept-Language
  4. 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/register est désactivée
  • Seul un utilisateur avec la permission create-user peut créer des comptes via POST /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

统计信息

  • 总下载量: 34
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 0
  • 点击次数: 5
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 0
  • Watchers: 0
  • Forks: 1
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2026-03-09

承接程序开发

PHP开发

VUE

Vue开发

前端开发

小程序开发

公众号开发

系统定制

数据库设计

云部署

网站建设

安全加固