etsvthor / laravel-bifrost-bridge
Connect a laravel application with the Bifrost oauth2 server
Package info
github.com/etsvThor/laravel-bifrost-bridge
pkg:composer/etsvthor/laravel-bifrost-bridge
Requires
- php: ~8.3.0 | ~8.4.0 | ~8.5.0
- laravel/framework: ^11.4.1 | ^12.19.3
- laravel/socialite: ^5.1
- spatie/laravel-data: ^4.0
- spatie/laravel-permission: ^6.0 | ^7.0
Requires (Dev)
Suggests
- filament/notifications: Show filament notifications on login and logout
- laracasts/flash: Show flash messages on login and logout
README
Connect a laravel application with the Bifrost
Installation
First, install spatie/laravel-permission, follow their installation guide
You can then install the package via composer:
composer require etsvthor/laravel-bifrost-bridge
You can publish the config file of bifrost and the underlying spatie permissions config+migrations with:
php artisan vendor:publish --provider="EtsvThor\\BifrostBridge\\BifrostBridgeServiceProvider" --tag="bifrost-config"
- Ensure the
usershas aoauth_user_idandemail_verified_atcolumn. - In the
Usermodel, castemail_verified_attodatetimeand add theHasRolestrait. - (only laravel <11) Please add
'webhooks/bifrost'to the CSRF exceptions inApp\Http\Middleware\VerifyCsrfTokenclass
Environment
Add the following to your .env file and fill them in:
# Required configuration BIFROST_ENABLED=true BIFROST_CLIENT_ID= BIFROST_CLIENT_SECRET= BIFROST_AUTH_PUSH_KEY= # Optional configuration with its defaults BIFROST_REDIRECT_URL="/login/callback" BIFROST_HOST="https://bifrost.thor.edu" BIFROST_ROUTE_PREFIX=
Configuration
In the configuration file, one can specify some thing about the user model, but have some sensible defaults
See config/bifrost.php for all options.
Make sure to seed all required roles, otherwise they will not sync
Resolvers
The User and Role model can be resolved using a custom resolver
use Spatie\Permission\Models\Role; use Illuminate\Database\Eloquent\Model as EloquentModel; // Default behaviour BifrostBridge::resolveUserClassUsing(function(/* auto injection works here */): EloquentModel { return app(config('bifrost.user.model', 'App\\Models\\User')); }); // Default behaviour BifrostBridge::resolveRoleClassUsing(function(/* auto injection works here */): Role { return app(PermissionRegistrar::class)->getRoleClass(); }); // Disabled role sync BifrostBridge::resolveRoleClassUsing(fn() => null); // Override the way a user is resolved BifrostBridge::resolveAndUpdateUserUsing(function(/* auto injection works here */, BifrostUserData $data): ?EloquentModel { // Model should implement \Illuminate\Contracts\Auth\Authenticatable return null; // when null is returned, the user is not logged in })
CSRF (laravel <11 only)
Don't forget to add 'webhooks/bifrost' to the $except array in App\Http\Middleware\VerifyCsrfToken.php.