This example shows how to use GraphCDN with a GraphQL API that does cookie-
based authentication using the passport
library for Node.js.
The example app uses Next.js:
- One page that shows a login form or a logout button, depending on the authorization state.
- One API route that runs the GraphQL API.
For the sake of example there's no validation of credentials, i.e. the login works with all credentials.
You can see a demo of this project at https://passport-auth.examples.graphcdn.org/
- Clone the repository
- Install the dependencies using
yarn
- Create a Vercel project by running
yarn deploy
and answering the prompts - Add a custom domain (e.g.
your.custom.domain
) to the project in Vercel (see the Vercel docs on how to do that) - Create a GraphCDN service for the GraphQL API at
https://your.custom.domain/api/graphql
, the name of the session cookie for authenticated users isconnect.sid
- Assign the custom domain
graphcdn.your.custom.domain
to the new service - Add environment variables
to your Vercel project (the ones from
.env.example
):SESSION_SECRET
: Any random string to use as secret for your session cookiesNEXT_PUBLIC_API_ENDPOINT
: The endpoint for your API, which now ishttps://graphcdn.your.custom.domain
- Create a new production deployment for the new environment variables to take
effect by running
yarn deploy --prod
You can also run this project locally like any other Next.js app. You only need
to copy the .env.example
file into .env.local
.
Using a GraphQL API that performs cookie-based authentication with GraphCDN requires an extra step: You need to set up a custom domain on GraphCDN.
The reason for that is just how cookies over HTTP work. When sending a request
to log in, the response usually contains a Set-Cookie
header that stores some
kind of token inside a cookie. However, the browser will by default not accept
this cookie for a "cross-origin request", i.e. a request that was sent to a
different domain.
GraphCDN gives you a subdomain where you can access your service out of the
box at <service-name>.graphcdn.app
, but this is a different domain than your
website.
To solve this, GraphCDN allows you to set a custom domain in the settings for your service. After adding the domain, you'll see a message that tells you how to modify your domains DNS settings.