beloop/user
Laravel package for managing application users—utilities for user models, authentication-related helpers, and common user workflows. Intended to speed up user management setup in Laravel projects with sensible defaults and extensible structure.
Installation Add the package via Composer:
composer require beloop/user
Publish the migration and config files:
php artisan vendor:publish --provider="Beloop\User\UserServiceProvider"
Run migrations:
php artisan migrate
First Use Case Register a new user via the provided facade:
use Beloop\User\Facades\User;
$user = User::create([
'email' => 'dev@example.com',
'password' => 'secure123',
'name' => 'Developer',
]);
Key Files to Review
config/user.php (default settings)app/Models/User.php (extended Eloquent model)app/Providers/UserServiceProvider.php (service binding)User Management
UserRepository:
$user = User::find(1);
$user->update(['role' => 'admin']);
if (Auth::check()) {
$user = Auth::user(); // Returns Beloop\User\Models\User
}
Customization
app/Models/User.php:
namespace App\Models;
use Beloop\User\Models\User as BeloopUser;
class User extends BeloopUser {
public function getFullNameAttribute() {
return "{$this->first_name} {$this->last_name}";
}
}
Schema::table('users', function (Blueprint $table) {
$table->string('api_token')->nullable();
});
API Integration
make:controller with the ResourceController trait:
use Beloop\User\Http\Controllers\ResourceController;
class UserController extends ResourceController {
protected $model = \App\Models\User::class;
}
Events & Listeners
UserRegistered):
// In EventServiceProvider
protected $listen = [
'Beloop\User\Events\UserRegistered' => [
'App\Listeners\SendWelcomeEmail',
],
];
Archived Package
Migration Conflicts
users table, manually merge migrations to avoid duplicates.remember_token may already exist in Laravel’s default migration.Facade vs. Dependency Injection
// Bad (tight coupling)
$user = User::find(1);
// Good (injectable)
public function __construct(UserRepository $userRepo) {
$this->userRepo = $userRepo;
}
Password Hashing
Hash facade by default. Override in config/user.php if needed:
'hash_driver' => 'bcrypt',
Log User Events Add a listener to debug events:
public function handle(UserRegistered $event) {
\Log::info('User registered:', ['user' => $event->user]);
}
Check Config Overrides
Ensure config/user.php isn’t being overridden by environment-specific files (e.g., .env or config/user.php in config/overrides).
Model Binding
If Auth::user() returns null, verify:
User model is bound in AuthServiceProvider:
protected $model = \App\Models\User::class;
users table exists and has the correct columns.Custom Guard
Extend the guard logic in app/Providers/AuthServiceProvider:
public function boot() {
$this->app['auth']->extend('custom', function ($app) {
return new CustomGuard($app['request'], $app['auth.user.provider']);
});
}
API Token Management Add a trait for API tokens:
use Beloop\User\Traits\HasApiTokens;
class User extends BeloopUser {
use HasApiTokens;
}
Soft Deletes Enable soft deletes in the model:
use Illuminate\Database\Eloquent\SoftDeletes;
class User extends BeloopUser {
use SoftDeletes;
protected $dates = ['deleted_at'];
}
Add the column to the migration:
$table->softDeletes();
How can I help you explore Laravel packages today?