auth
auth copied to clipboard
🔐 Refresh/Access Token Authentication Demo with Client Side Rendering, Server Side Rendering and Websockets

Fullstack Authentication
Access/Refresh Token Authentication Demo with Node.js And Typescript

Watch the YouTube Tutorial
Stack
Backend: Node.js, Typescript, MongoDB, Kubernetes
Frontend: Next.js, Typescript
DevOps: Docker, Terraform, Kubernetes, Google Cloud
Usage
Recommended OS: Ubuntu 20.04 LTS
Requirements: Docker, Docker Compose, Yarn, Node.js
Optional: Terraform, Google Cloud SDK
Setup
-
make setup
- Create GitHub OAuth app here
- Set "Homepage URL" to
http://localhost:3000
- Set "Authorization callback URL" to
http://localhost:3000/github
- Set
GITHUB_CLIENT_ID
in.env.development
- Set
NEXT_PUBLIC_GITHUB_CLIENT_ID
inclient/.env.development
- "Generate a new client secret"
- Set
GITHUB_CLIENT_SECRET
in.env.development
- Set "Homepage URL" to
Development
-
make client
(Start Next.js development server, http://localhost:3000) -
make backend
(Start development backend services)
Codebase
Services
-
client
Next.js client (web application) -
api
Node.js server (http api) -
realtime
Node.js server (websocket server) -
shared
Typescript lib (shared code) -
infrastructure
Terraform (configurations to deploy application in the cloud)
Deployment
Commands
-
make init-infrastructure
(Initialize Terraform) -
make apply
(Apply cloud resources, ~15 minutes) -
make deploy
(Build and deploy services to Kubernetes cluster) -
make destroy
(Destroy cloud resources) -
make client-image
(Build and push client Docker image) -
make api-image
(Build and push api Docker image) -
make realtime-image
(Build and push Docker image)
Step by step guide
- Configure variables in
Makefile
- Sign into your project
gcloud auth application-default login
- Create the bucket for storing Terraform state (
make create-terraform-bucket
) - Set
terraform.backend.bucket
in infrastructure/main.tf toTF_BUCKET
- Insert secrets into Google Cloud Secret Manager
- GitHub OAuth (create here)
- Set "Authorization callback URL" to
https://api.${DOMAIN}/github
-
github_client_id
-
github_client_secret
- Set "Authorization callback URL" to
- Secrets (generate here)
-
refresh_token_secret
-
access_token_secret
-
- MongoDB Atlas (create a free cluster here)
- Navigate to Project Settings -> Access Manager -> API Keys -> Create API Key -> Select Project Owner
-
mongodbatlas_public_key
-
mongodbatlas_private_key
-
atlas_project_id
(found under Settings)
- GitHub OAuth (create here)
- Add
0.0.0.0/0
to your MongoDB Atlas project "IP Access List" (Under Network Access) - Enable Container Registry in your GCP console
-
make init-infrastructure
-
make deploy
- Go to Google Cloud DNS,
main-zone
, copy theNS
record to your domain registrar - Uncomment code block in infrastructure/modules/kubernetes-cert-manager/main.tf and run
make apply
- The app should be live at
https://${DOMAIN}
- Every time you want to deploy changes, just run
make deploy
Credits
Icons made by Smashicons from www.flaticon.com