Level 1
I fix it I just have problem with SESSION_DRIVER
Be part of JetBrains PHPverse 2026 on June 9 – a free online event bringing PHP devs worldwide together.
<?php
declare(strict_types=1);
namespace App\Http\Controllers\Auth;
use App\Enums\UserRole;
use App\Models\User;
use Illuminate\Auth\Events\Registered;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Str;
use Illuminate\Validation\ValidationException;
use Laravel\Socialite\Facades\Socialite;
final class OAuthController
{
/**
* Redirect the user to the OAuth Provider.
*/
public function redirect(Request $request, string $provider): RedirectResponse
{
$this->validateProvider($provider);
return Socialite::driver($provider)->stateless()->redirect();
}
/**
* Handle the OAuth Provider callback.
*/
public function callback(Request $request, string $provider): RedirectResponse
{
$this->validateProvider($provider);
$socialUser = Socialite::driver($provider)->stateless()->user();
$user = User::where('email', $socialUser->getEmail())->first();
if ($user) {
Auth::login($user, true);
} else {
$user = User::create([
'provider' => $provider,
'provider_id' => $socialUser->getId(),
'avatar' => $socialUser->getAvatar(),
'name' => $socialUser->getName() ?? $socialUser->getNickname(),
'email' => $socialUser->getEmail(),
'password' => Str::password(),
'email_verified_at' => now(),
]);
$user->assignRole(UserRole::User->value);
event(new Registered($user));
Auth::login($user, true);
$request->session()->regenerate();
return to_route('dashboard');
}
}
/**
* Validates that the OAuth Provider is supported.
*
* @return array<string, mixed>
*/
private function validateProvider(string $provider): void
{
$allowedProviders = ['google', 'facebook', 'twitter'];
if (! in_array($provider, $allowedProviders, true)) {
throw ValidationException::withMessages([
'provider' => __('Unsupported OAuth provider.'),
]);
}
}
}
Please or to participate in this conversation.