Answer
To use Google Calendar with Clerk authentication, you need to enable Google OAuth and request the appropriate calendar scopes. (1)
Required Scopes
When configuring Google as a social connection, include these scopes to access calendar data:
Accessing Calendar Data
Once a user signs in with Google, Clerk stores and manages their OAuth tokens automatically. Use getUserOauthAccessToken to retrieve the access token for making Google Calendar API requests:
'use server'import{auth,clerkClient}from'@clerk/nextjs/server'exportasyncfunctiongetGoogleToken(){const{ userId }=awaitauth()constclient=awaitclerkClient()consttoken=awaitclient.users.getUserOauthAccessToken(userId||'','oauth_google')return{token: token.data[0].token,}}Making Calendar Requests
Use the retrieved token to call the Google Calendar API:
constclient=awaitclerkClient()consttoken=awaitclient.users.getUserOauthAccessToken(userId,'oauth_google')constaccessToken=token.data[0].token// Code removed for brevity.constresponse=awaitfetch(`<https://www.googleapis.com/calendar/v3/calendars/$%7BencodeURIComponent(> calendarId, ) }/events?timeMin=${monthStart.toISOString()}&timeMax=${monthEnd.toISOString()}&singleEvents=true&orderBy=startTime`,{headers: {Authorization: `Bearer ${accessToken}`,},},)Clerk automatically keeps access tokens current, so you don't need to handle token refresh manually. For a complete working example, check out the BookMate demo application or its source code on GitHub .
Answer
To use Google Calendar with Clerk authentication, you need to enable Google OAuth and request the appropriate calendar scopes. (1)
Required Scopes
When configuring Google as a social connection, include these scopes to access calendar data:
Accessing Calendar Data
Once a user signs in with Google, Clerk stores and manages their OAuth tokens automatically. Use
getUserOauthAccessTokento retrieve the access token for making Google Calendar API requests:Making Calendar Requests
Use the retrieved token to call the Google Calendar API:
Clerk automatically keeps access tokens current, so you don't need to handle token refresh manually. For a complete working example, check out the BookMate demo application or its source code on GitHub .