Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/arifimran5/jwt-auth-fastify
token based auth with fastify, prisma, jwt and typescript
https://github.com/arifimran5/jwt-auth-fastify
fastify jwt typescript zod
Last synced: 16 days ago
JSON representation
token based auth with fastify, prisma, jwt and typescript
- Host: GitHub
- URL: https://github.com/arifimran5/jwt-auth-fastify
- Owner: arifimran5
- Created: 2023-09-20T14:46:34.000Z (over 1 year ago)
- Default Branch: master
- Last Pushed: 2023-12-02T15:26:53.000Z (about 1 year ago)
- Last Synced: 2023-12-02T16:29:13.026Z (about 1 year ago)
- Topics: fastify, jwt, typescript, zod
- Language: TypeScript
- Homepage:
- Size: 29.3 KB
- Stars: 12
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
## Token based authentication with Fastify, JWT and Prisma
This is a repository for a JWT authentication service using **Fastify**, **Prisma**, **sqlite db** and **TypeScript**. It allows users to register, login, logout, and get a list of users from a sqlite database. It uses bcrypt for hashing passwords, zod for validating schemas, and fastify-jwt for generating and verifying tokens.
## App structure
```
jwt-auth-fastify
├── package.json
├── tsconfig.json
├── prisma
│ ├── migrations
│ └── schema.prisma
└── src
├── app.ts
├── modules
│ └── user
│ ├── user.controller.ts
│ ├── user.route.ts
│ └── user.schema.ts
└── utils
├── prisma.ts
└── types.ts
```## Installation
To install this project, you need to have Node.js, pnpm installed on your machine.
Then, run the following commands in your terminal:
```bash
# Clone the repository
git clone https://github.com/arifimran5/jwt-auth-fastify.git# Change directory
cd jwt-auth-fastify# Install dependencies
pnpm install# Run migrations
pnpm prisma migrate dev# Start the development server
pnpm dev
```The server will run on http://localhost:8000 by default.
## Usage
The project exposes four endpoints for user authentication:
- GET /: returns a list of users with their name, id, and email. Requires an access token in the cookie or the authorization header.
- POST /register: creates a new user with the given name, email, and password. Returns the user data and an access token.
- POST /login: logs in an existing user with the given email and password. Returns the user data and an access token.
- DELETE /logout: logs out the current user by clearing the access token cookie.You can use a tool like Postman Here are some examples:
- GET /: returns a list of users with their name, id, and email. Requires an access token in the cookie or the authorization header.
- POST /register: creates a new user with the given name, email, and password. Returns the user data and an access token.
- POST /login: logs in an existing user with the given email and password. Returns the user data and an access token.
- DELETE /logout: logs out the current user by clearing the access token cookie.## Parameters
The API accepts the following parameters in the request body:
- name: the name of the user. Required for the /register endpoint. Must be a string.
- email: the email of the user. Required for the /register and /login endpoints. Must be a valid email address.
- password: the password of the user. Required for the /register and /login endpoints. Must be a string with at least 6 characters.## Dependencies
The project uses the following dependencies:
- @fastify/cookie: for setting and clearing cookies
- @fastify/jwt: for generating and verifying JSON web tokens
- @prisma/client: for interacting with the PostgreSQL database
- bcrypt: for hashing and comparing passwords
- fastify: for creating the web server
- fastify-zod: for validating request and response schemas
- zod: for defining schemasThe project also uses the following dev dependencies:
- @types/bcrypt: for TypeScript type definitions for bcrypt
- @types/node: for TypeScript type definitions for Node.js
- prisma: for managing the database schema and migrations
- tsx: for compiling and watching TypeScript files
- typescript: for writing and checking TypeScript code## Contribution
If you want to contribute to this project, you can fork the repository and create a pull request with your changes. Please follow the code style and conventions of the project, and write clear and concise commit messages. You can also report any issues or suggestions on the GitHub issue tracker.