Sometimes, you may wish to redirect users after registration to a different resource or page instead of a dashboard. But how is that done? Do you have to build a custom registration page? No! There's a much easier way.
If you have just one panel in your filament application, you can implement the redirect as follows:
Create a new file app/Http/Responses/RegisterResponse.php
with the following contents:
namespace App\Http\Responses; use App\Filament\Resources\OrderResource;use Illuminate\Http\RedirectResponse;use Livewire\Features\SupportRedirects\Redirector; class RegisterResponse extends \Filament\Http\Responses\Auth\RegistrationResponse{ public function toResponse($request): RedirectResponse|Redirector { // Here, you can define which resource and which page you want to redirect to return redirect()->to(EmployeeResource::getUrl()); }}
Then all we have to do is modify the Singleton:
app/Providers/AppServiceProvider.php:
use Filament\Http\Responses\Auth\Contracts\RegistrationResponse;use Illuminate\Support\ServiceProvider;// ... public function register(): void{ $this->app->singleton( RegistrationResponse::class, \App\Http\Responses\RegisterResponse::class );}
That's it! When a user register, the filament will attempt to return RegistrationResponse
internally, but we just changed the implementation to our own, which redirects to the order resource.
You can implement the redirect per panel if you have multiple panels in your filament application! Here's how:
Create a new file app/Http/Responses/RegisterResponse.php
with the following contents:
use App\Filament\Customer\Resources\MyOrdersResource;use App\Filament\Resources\OrderResource;use Filament\Facades\Filament;use Illuminate\Http\RedirectResponse;use Livewire\Features\SupportRedirects\Redirector; class LoginResponse extends \Filament\Http\Responses\Auth\LoginResponse{ public function toResponse($request): RedirectResponse|Redirector { // You can use the Filament facade to get the current panel and check the ID if (Filament::getCurrentPanel()->getId() === 'admin') { return redirect()->to(OrderResource::getUrl('index')); } if (Filament::getCurrentPanel()->getId() === 'customer') { return redirect()->to(MyOrdersResource::getUrl('index')); } return parent::toResponse($request); }}
Then all we have to do is modify the Singleton:
app/Providers/AppServiceProvider.php:
use Filament\Http\Responses\Auth\Contracts\RegistrationResponse;use Illuminate\Support\ServiceProvider;// ... public function register(): void{ $this->app->singleton( RegistrationResponse::class, \App\Http\Responses\RegisterResponse::class );}
That's it! Now each panel will redirect to a different resource after registration.
A few of our Premium Examples: