Back

How to build a public OnceHub integration: Building the Auth Flow

Aug 12, 20248 minute read

Hey there, fellow JavaScript enthusiasts! Ready to dive into the world of OnceHub integrations? Today, we're going to tackle one of the most crucial aspects of building a public integration: the authorization flow. Buckle up, because we're about to make your integration secure and user-friendly in no time!

Introduction

OnceHub integrations are a fantastic way to extend the functionality of your apps. But before we can start playing with all the cool features, we need to ensure our users can securely connect their OnceHub accounts. That's where the auth flow comes in – it's the gatekeeper that keeps the bad guys out and lets the good guys in.

Prerequisites

Before we jump in, make sure you've got:

  • A OnceHub developer account (if you don't have one, go grab it – I'll wait!)
  • A solid grasp on OAuth 2.0 (don't worry, we'll refresh your memory as we go)
  • Node.js and Express.js set up and ready to roll

Got all that? Great! Let's get our hands dirty.

Setting up the OAuth 2.0 flow

First things first, we need to register our application with OnceHub. Head over to your OnceHub developer dashboard and create a new app. You'll get a client ID and client secret – treat these like your firstborn, they're precious!

const CLIENT_ID = 'your_client_id_here'; const CLIENT_SECRET = 'your_client_secret_here';

Implementing the authorization request

Now, let's build the URL that'll send our users to OnceHub's authorization page:

const authUrl = `https://app.oncehub.com/oauth/authorize?client_id=${CLIENT_ID}&response_type=code&redirect_uri=${encodeURIComponent(REDIRECT_URI)}`;

When your user wants to connect their OnceHub account, just redirect them to this URL. Easy peasy!

Handling the callback

Once the user grants permission, OnceHub will redirect them back to your specified redirect URI with an authorization code. Let's set up an endpoint to catch that:

app.get('/callback', async (req, res) => { const { code } = req.query; // We'll use this code in the next step });

Exchanging the code for access token

Now for the fun part – let's trade that code for an access token:

const tokenResponse = await axios.post('https://app.oncehub.com/oauth/token', { grant_type: 'authorization_code', client_id: CLIENT_ID, client_secret: CLIENT_SECRET, code, redirect_uri: REDIRECT_URI }); const { access_token, refresh_token } = tokenResponse.data;

Boom! You've got your access token. This is your golden ticket to the OnceHub API.

Refreshing the access token

Access tokens don't last forever, so let's implement a refresh mechanism:

async function refreshAccessToken(refresh_token) { const response = await axios.post('https://app.oncehub.com/oauth/token', { grant_type: 'refresh_token', client_id: CLIENT_ID, client_secret: CLIENT_SECRET, refresh_token }); return response.data.access_token; }

Securing the token storage

Remember, with great power comes great responsibility. Store these tokens securely on your server – never expose them to the client-side!

// DO NOT do this localStorage.setItem('access_token', access_token); // Bad idea! // Instead, store it securely on your server // Use a database or a secure key management system

Making authenticated requests

Now you're ready to make API calls! Just include the access token in your requests:

const response = await axios.get('https://api.oncehub.com/v2/bookings', { headers: { Authorization: `Bearer ${access_token}` } });

Error handling and edge cases

Always be prepared for the unexpected. Handle expired tokens gracefully:

try { // Make API call } catch (error) { if (error.response && error.response.status === 401) { // Token expired, refresh and retry const newToken = await refreshAccessToken(refresh_token); // Retry the API call with the new token } }

Testing the auth flow

Before you pop the champagne, make sure to thoroughly test your auth flow. Try different scenarios:

  • Happy path: everything works perfectly
  • Token expiration: make sure refresh works
  • Invalid tokens: handle errors gracefully

Consider setting up automated tests to catch any future regressions.

Conclusion

And there you have it, folks! You've just built a rock-solid auth flow for your OnceHub integration. Pat yourself on the back – you've taken a big step towards creating a secure and user-friendly integration.

Remember, this is just the beginning. Now that you've got the auth flow down, the sky's the limit. Go forth and build amazing things with the OnceHub API!

Happy coding, and may your tokens always be fresh and your API calls always successful! 🚀