cartalyst/sentry
Sentry is a Laravel/PHP authentication and authorization package offering user registration, login, password resets, groups/roles, permissions, activation, throttling, and session handling. Works with multiple frameworks and integrates with Eloquent/DB backends.
Installation:
composer require cartalyst/sentry
(Note: As of Laravel 8+, consider migrating to Laravel's built-in auth system or spatie/laravel-permission for authorization.)
Publish Config:
php artisan vendor:publish --provider="Cartalyst\Sentry\SentryServiceProvider"
Edit config/sentry.php to match your database schema (default tables: users, groups_users, groups, permissions).
First Use Case:
use Cartalyst\Sentry\Sentry;
$user = Sentry::authenticate(['email' => 'user@example.com', 'password' => 'password']);
if (Sentry::check()) {
if (Sentry::getUser()->hasAccess(['create_post'])) {
// Grant access
}
}
Key Files:
config/sentry.php: Configuration (drivers, table names, etc.).app/Providers/SentryServiceProvider.php: Service binding (if customized).app/Providers/AuthServiceProvider.php: Override boot() to integrate with Laravel’s auth if needed.User Management:
$user = Sentry::createUser(['email' => 'user@example.com', 'password' => 'password']);
Sentry::getUser()->setFirstName('John')->save();
Sentry::getUser()->delete();
Group & Permission Handling:
$group = Sentry::findGroupByName('Admins');
Sentry::getUser()->addGroup($group);
if (Sentry::getUser()->inGroup('Admins')) { ... }
$group->addPermission('edit_posts');
Authentication:
Sentry::authenticate($credentials);
Sentry::logout();
Sentry::authenticate($credentials, true); // Persistent session
Middleware Integration:
Sentry::check() in middleware to restrict routes:
public function handle($request, Closure $next) {
if (!Sentry::check()) return redirect('login');
return $next($request);
}
Custom Guards:
AuthServiceProvider:
public function boot() {
$this->app['auth']->extend('sentry', function($app) {
return new SentryGuard(Sentry::getUserProvider());
});
}
Auth::guard('sentry')->user() for consistency.laravel/passport for token-based auth:
$token = Sentry::getUser()->createToken('API Token')->accessToken;
sentry.user.created or sentry.login via Laravel’s event system.Sentry::getUserProvider() to mock users in tests:
$this->actingAs(Sentry::findUserById(1));
Deprecation Warning:
auth + spatie/laravel-permission or zizaco/entrust.Database Schema Conflicts:
users, groups_users) may clash with Laravel’s migrations. Override in config/sentry.php:
'table_users' => 'custom_users',
'table_groups_users' => 'custom_groups_users',
Session Handling:
config/session.php matches Sentry’s storage (e.g., database or file).Password Hashing:
bcrypt by default. If using Laravel’s Hash facade, ensure consistency:
Sentry::hashPassword($password); // Uses Sentry’s hasher
Permission Caching:
Sentry::getUser()->permissions()->flushCache();
Sentry::setLogLevel(\Monolog\Logger::DEBUG);
config/sentry.php table names and users table structure.groups_permissions table or run php artisan sentry:permissions:list.config/sentry.php:
'remember' => 1209600, // 2 weeks in seconds
Custom User Model:
Cartalyst\Sentry\Users\Eloquent\User:
class CustomUser extends User {
public function roles() { return $this->belongsToMany(Role::class); }
}
SentryServiceProvider:
$this->app->bind('sentry.user.model', function() {
return new CustomUser();
});
Custom Drivers:
Cartalyst\Sentry\Drivers\DriverInterface for non-database auth (e.g., OAuth).Events:
sentry.user.created) in EventServiceProvider:
protected $listen = [
'sentry.user.created' => ['App\Listeners\SendWelcomeEmail'],
];
API Tokens:
SentryUserProvider to return HasApiTokens:
class SentryUserProvider extends \Cartalyst\Sentry\Users\Eloquent\UserProvider {
public function retrieveByToken($identifier, $token) {
return parent::retrieveByToken($identifier, $token)->first();
}
}
How can I help you explore Laravel packages today?