To connect multiple users' Google Calendars to your SaaS app and allow them to schedule events, you can use OAuth 2.0 for user authentication and authorization. Here's a step-by-step guide to achieve this:
-
Set Up Google API Credentials:
- Go to the Google Cloud Console.
- Create a new project or select an existing one.
- Enable the Google Calendar API for your project.
- Create OAuth 2.0 credentials (Client ID and Client Secret) for a web application.
-
Install Required Packages:
- Use the
spatie/laravel-google-calendarpackage for interacting with Google Calendar. - Use the
socialiteproviders/googlepackage for OAuth authentication.
Install the packages via Composer:
composer require spatie/laravel-google-calendar socialiteproviders/google - Use the
-
Configure Socialite:
- Add the Google provider to your
config/services.php:
'google' => [ 'client_id' => env('GOOGLE_CLIENT_ID'), 'client_secret' => env('GOOGLE_CLIENT_SECRET'), 'redirect' => env('GOOGLE_REDIRECT_URI'), ],- Add the environment variables to your
.envfile:
GOOGLE_CLIENT_ID=your-client-id GOOGLE_CLIENT_SECRET=your-client-secret GOOGLE_REDIRECT_URI=https://your-app.com/auth/google/callback - Add the Google provider to your
-
Set Up Routes and Controllers:
- Define routes for Google OAuth:
// routes/web.php Route::get('auth/google', [GoogleController::class, 'redirectToGoogle']); Route::get('auth/google/callback', [GoogleController::class, 'handleGoogleCallback']);- Create a controller to handle the OAuth flow:
// app/Http/Controllers/GoogleController.php namespace App\Http\Controllers; use Illuminate\Http\Request; use Socialite; use App\Models\User; class GoogleController extends Controller { public function redirectToGoogle() { return Socialite::driver('google') ->scopes(['https://www.googleapis.com/auth/calendar']) ->redirect(); } public function handleGoogleCallback() { $user = Socialite::driver('google')->stateless()->user(); // Save the user's token and refresh token $authUser = User::updateOrCreate( ['email' => $user->getEmail()], [ 'name' => $user->getName(), 'google_id' => $user->getId(), 'google_token' => $user->token, 'google_refresh_token' => $user->refreshToken, ] ); auth()->login($authUser, true); return redirect()->route('home'); } } -
Store and Use Tokens:
- Ensure your
userstable has columns forgoogle_id,google_token, andgoogle_refresh_token. - Use the stored tokens to interact with the Google Calendar API.
- Ensure your
-
Create Events in Google Calendar:
- Use the
spatie/laravel-google-calendarpackage to create events:
// In your controller or service use Spatie\GoogleCalendar\Event; use Carbon\Carbon; public function createGoogleCalendarEvent($user, $eventDetails) { $googleClient = new \Google_Client(); $googleClient->setAccessToken($user->google_token); if ($googleClient->isAccessTokenExpired()) { $googleClient->fetchAccessTokenWithRefreshToken($user->google_refresh_token); $user->google_token = $googleClient->getAccessToken(); $user->save(); } $event = new Event; $event->name = $eventDetails['name']; $event->startDateTime = Carbon::parse($eventDetails['start']); $event->endDateTime = Carbon::parse($eventDetails['end']); $event->save(); } - Use the
By following these steps, you can allow multiple users to connect their Google Calendars to your SaaS app and schedule events directly in their calendars.