/node-mysql-jwt-auth

An example REST API showcasing how to authenticate users with NodeJS, Express, and JWT

Primary LanguageJavaScript

NodeJS Auth REST API example with Express, Mysql, and JWT

Features

  1. User can sign up
  2. User can sign in

API endpoints

  1. POST /api/auth/signup: Creates a new user
  2. POST /api/auth/signin: Logs in a user

Body Payload Specification

Signup expects

{
    firstname: string,
    lastname: string,
    email: string,
    password: string
}

Signin expects

{
    email: string,
    password: string
}

Tools

  • NodeJS/Express: Server
  • MySQL: Storage
  • JWT: Token based authentication
  • bcryptjs: Password security
  • winston/morgan: Logs
  • Joi: Validations

Available scripts

  • start: Starts the server with node
  • start:dev: Starts the server in watch mode
  • db:up: Creates the database
  • db:down: Drops the database
  • tables:up: Creates database tables
  • db:init: Creates both the database and tables

Getting started

You can either fork this repository or clone it by starting your terminal, then change the directory to where you would like to save it and run

git clone https://github.com/desirekaleba/node-mysql-jwt-auth.git

Change to the newly downloaded directory with

cd node-mysql-jwt-auth

Rename the file named .env.example to .env and update the variable values with valid ones

Install the required dependencies with

npm install

Initialize the database with

npm run db:init

Start the app with

npm start

You can also start it in watch mode with

npm run start:dev

Folder structure

.
├── README.md
├── package-lock.json
├── package.json
└── src
    ├── app.js
    ├── config
    │   ├── db.config.init.js
    │   └── db.config.js
    ├── controllers
    │   └── auth.controller.js
    ├── database
    │   ├── queries.js
    │   └── scripts
    │       ├── dbDown.js
    │       ├── dbUp.js
    │       └── tablesUp.js
    ├── index.js
    ├── middlewares
    │   ├── asyncHandler.js
    │   ├── checkEmail.js
    │   └── validatorHandler.js
    ├── models
    │   └── user.model.js
    ├── routes
    │   └── auth.route.js
    ├── utils
    │   ├── logger.js
    │   ├── password.js
    │   ├── secrets.js
    │   └── token.js
    └── validators
        └── auth.js