The company I work for recently purchased an enterprise subscription for Circle.so (Circle), a white-label community platform. Before Circle, we used a Facebook group to interact with our community. Although this worked, there were 3 major pain points that prevented it from becoming a larger part of our platform’s offering:
We needed to get out of Facebook, and introduce something that alleviates those 3 pain points. The solution? Circle.
The premise was simple: instead of spending design & dev hours on building out our own community platform, we remove Circle’s branding and embed the platform into a “Community” page of our web application.
Circle provides an area from within their admin panel to configure the endpoints they'll query when a user is authenticating.
Something that's important to note while building the endpoints is: Circle cannot query
localhost. This means that you'll have to forward your local server when testing. I recommend using something like Ngrok.
This means that we can create 3 endpoints for Circle to query:
The Authorization URL will change depending on your platform's requirements, however in this case we found it most beneficial to require a JWT for authentication. The process was simple: first we validate the JWT (we use Firebase). Then, if the JWT is valid, we redirect the user along with a
code URL parameter which is set to the BASE64'd JWT.
The Token Fetch URL was included by Circle in case you were using a pre-built solution (like Facebook auth). Since we're not doing that, and instead building our own, all we need to do here is ensure that the provided
client_secret are valid, and then respond with the same authentication token provided in the Authorization URL.
The Profile Info API URL decodes the JWT (remember: we converted it to BASE64) and queries for the corresponding user. The, if the user exists, it returns the user's
name (we don't have avatar images for our users).
After those 3 endpoints are configured, all you have to do is enter them into the Circle.so admin panel, and you're ready to go!