Dieses Projekt kann als Vorlage für die Implementierung von Google-Authentifizierung in Laravel verwendet werden. Es beinhaltet Docker-Umgebungen mit Apache als Webserver, PostgreSQL als Datenbank und Adminer für die Verwaltung.
Führe den folgenden Composer-Befehl aus, um Socialite in deinem Laravel-Projekt zu installieren:
composer require laravel/socialite
Gehe zu Google Developer Console, erstelle ein neues Projekt und aktiviere die "Google+ API" und die "Google Identity Platform".
Erstelle dann ein OAuth 2.0 Client ID und speichere die Client-ID und den Client-Secret, die du für die Konfiguration benötigst.
Füge die folgenden Variablen in deine `.env`-Datei ein:
GOOGLE_CLIENT_ID=deine-client-id
GOOGLE_CLIENT_SECRET=dein-client-secret
GOOGLE_REDIRECT_URI=http://deine-domain/login/google/callback
Füge die Google-Konfiguration in der `config/services.php` hinzu:
'google' => [
'client_id' => env('GOOGLE_CLIENT_ID'),
'client_secret' => env('GOOGLE_CLIENT_SECRET'),
'redirect' => env('GOOGLE_REDIRECT_URI'),
],
Erstelle eine Route für den Google-Login und den Callback:
use Socialite;
Route::get('login/google', [GoogleAuthController::class, 'redirect']);
Route::get('login/google/callback', [GoogleAuthController::class, 'callback']);
Im **GoogleAuthController** implementiere die Logik:
class GoogleAuthController extends Controller
{
/**
* Redirect the user to Google’s OAuth page.
*/
public function redirect()
{
return Socialite::driver('google')->redirect();
}
/**
* Handle the callback from Google.
*/
public function callback()
{
try {
// Get the user information from Google
$user = Socialite::driver('google')->user();
} catch (Throwable $e) {
return redirect('/')->with('error', 'Google authentication failed.');
}
$existingUser = User::where('email', $user->email)->first();
if ($existingUser) {
Auth::login($existingUser);
} else {
$newUser = User::updateOrCreate([
'email' => $user->email
], [
'name' => $user->name,
'password' => bcrypt(Str::random(16)),
'email_verified_at' => now()
]);
Auth::login($newUser);
}
return redirect('/dashboard');
}
}