Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/mmvergara/react-golang-postgresql-auth-template
Minimalistic boilerplate or Template for React, Go/Golang, PostgreSQL with JWT Authentication. Client and Server Protected Routes
https://github.com/mmvergara/react-golang-postgresql-auth-template
boilerplate boilerplate-template go golang postgres postgresql react template
Last synced: 10 days ago
JSON representation
Minimalistic boilerplate or Template for React, Go/Golang, PostgreSQL with JWT Authentication. Client and Server Protected Routes
- Host: GitHub
- URL: https://github.com/mmvergara/react-golang-postgresql-auth-template
- Owner: mmvergara
- License: mit
- Created: 2024-09-08T00:46:01.000Z (2 months ago)
- Default Branch: main
- Last Pushed: 2024-09-08T03:05:36.000Z (2 months ago)
- Last Synced: 2024-10-17T12:55:06.964Z (27 days ago)
- Topics: boilerplate, boilerplate-template, go, golang, postgres, postgresql, react, template
- Language: Go
- Homepage:
- Size: 54.7 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.MD
- License: LICENSE.MD
Awesome Lists containing this project
README
React Go PostgreSQL Auth Template
Minimalistic boilerplate for React, Go, PostgreSQL.
## Features
- 🚀 Client and Server Protected Routes
- 🚀 User Authentication
- 🚀 Go stdlib `net/http`
- 🚀 PostgreSQL no orm
- 🚀 Clean Architecture
- 🚀 Docker---
## Setup
### Frontend
#### 1. Run Vite
```bash
npm install
npm run dev
```### Backend
#### 1. Set your Environment Variables
```py
# Here is an example .env file
PORT=8080
JWT_TOKEN_DURATION_HOURS=24
JWT_SECRET=meowDB_HOST=localhost
DB_PORT=5432
DB_DATABASE=gpa # database name
DB_USERNAME=root
DB_PASSWORD=password
DB_SCHEMA=public
```#### 2. Change makefile to match your database name
```makefile
db:
docker compose up -d;
# default is "gpa" as specified in .env
psql -h localhost -p 5432 -U root -d gpa;```
#### 3. Set up database schema
connect to db
```bash
make db
```execute this sql query`./internal/database/schema.sql` in your database
```sql
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
DROP TABLE IF EXISTS users;
CREATE TABLE users (
user_id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
email VARCHAR(254) UNIQUE NOT NULL,
password_hash VARCHAR(255) NOT NULL,
created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP
);```
#### 4. Run Server
```bash
# run db
make db# run server
go run cmd/api/main.go# or use air for hot reload
air
```---
## What you need to know
### Frontend-Backend Communication
#### Success:
- Backend: `sendJson(w, response, http.StatusOK)`
- `sendJson` is just util function that just sends a JSON response to the client
- Frontend: `response.json()`#### Error:
- Backend: `http.Error(w, "Invalid Request", http.StatusBadRequest)`
- Frontend: `response.text()`### Frontend Stuff
- `/router/index.tsx` is where you declare and manage your routes
- `/context/AuthContext.tsx` is where you can find the `useAuth` hook
- This hook gives you access to the `user` object from the backend
- Manages the expiration of the JWT token
- `/Providers.tsx` is where you can add more `providers` or `wrappers`---
### Inspired By:
[go-blueprint](https://github.com/Melkeydev/go-blueprint)
[How I write HTTP services in Go after 13 years](https://grafana.com/blog/2024/02/09/how-i-write-http-services-in-go-after-13-years/#an-opportunity-to-hide-the-requestresponse-types-away)