Skip to content

alexdeploy/node-auth-api

Repository files navigation

Node Auth API

Features · Installation · Configuration · Deploying · Docs

High secure authentication API built with NodeJS

node.js version express version mongodb version license

Secure and easy-to-configure user authentication API developed using Node.js, Express, and MongoDB. It provides robust password encryption, token-based authentication, email verification, and seamless email delivery integration. With its straightforward setup, this project enables developers to quickly build a reliable and secure API user authentication system for their applications.

🧩 Features

  • ✅ Login attempts limited.
  • ✅ Server-side password encryption using bcrypt.
  • ✅ Generation of verification tokens with jwt
  • ✅ Account verification via email with nodemailer
  • ✅ API calls with validation-middelware using user token.
  • ⬜ Protection against code injection.

Performance

  • ✅ Well-defined endpoints for each authentication step.
  • ✅ Solid unit testing.
  • ✅ Easy app configuration using app.config.json file

Functions

  • ✅ Sign up.
  • ✅ Sign in.
  • ✅ Restore password.
  • ✅ Verify user email.
  • ⬜ Sign in/up with social [ Apple, Google ]
  • ⬜ Biometric Authentification

📥 Installation

  1. Clone the repository
git clone https://github.com/alexdeploy/node-auth-api.git
  1. Navigate to project directory.
cd node-auth-api
  1. Install the dependencies.
yarn install

⚠️ Ya tenemos el proyecto instalado, pero antes de iniciarlo hay que realizar configuración importante para que la API funcione, como la conexión con nuestra base de datos, las variables de entorno, y la configuración global de la API.

⚙️ Configuration

[soon...]

Crear / añadir base de datos.

En este caso vamos a utilizar MongoDB Atlas, un servicio de MongoDB en la nube. El plan gratuito te ofrece características sucifientes, sino, ajústalo a tu proyecto.

Aquí puedes ver 👉 cómo crear una base de datos en MongoDB Atlas para node-auth-api.

Obtenemos en link para conectarnos a la base de datos. En mongoDB Cloud es algo como esto:

DB_URI=mongodb+srv://<username>:<password>@cluster0.ardcz2k.mongodb.net/

Donde <username> y <password> son las credenciales de un usuario con acceso a la base de datos.

  • api.config.json
  • Connect with MongoDB
  • User Schema

🚀 Deploying

El deploy se va a hacer en Heroku. Para esto vamos a necesitar:

  • Cuenta de Heroku
  • Heroku CLI

Una vez instalado heroku CLI, en la carpeta del proyecto ejecutamos:

heroku login

Y persionamos ENTER. Nos abrirá una ventana para hacer login en nuestra cuenta de heroku.

heroku create -a app-name

Esto creará una nueva app en heroku.

Comprobamos que se ha configurado correctamente con:

git remote -v
> heroku  https://git.heroku.com/node-auth-api-dev.git (fetch)
> heroku  https://git.heroku.com/node-auth-api-dev.git (push)
> origin  https://github.com/alexdeploy/node-auth-api.git (fetch)
> origin  https://github.com/alexdeploy/node-auth-api.git (push)

Configuramos las variables de entorno en heroku.

heroku config:set NOMBRE_VARIABLE=valor

Comprobamos que se han guardado correctamente

heroku config

Vamos a nuestra aplicación -> Settings -> Config Bars.

Introducimos todos las claves y valores del archivo .env.

# Desplegar la rama main
git push heroku main
# Desplegar otra rama (dev)
git push heroku dev:main

NOTAS IMPORTANTES SOBRE HEROKU CLI

  • Para volver a hacer deploy en caso de falla, tienes que realizar por lo menos un git commit

Set a custom domain

Vamos a hacerlo utilizando los comandos domain de Heroku CLI.

Si ya tenemos nuestro proveedor de dominios y nuestro dominio:

heroku domains:add www.example.com

Comprobamos que se ha creado:

heroku domains
Domain Name DNS Record Type DNS Target SNI Endpoint
www.example.com CNAME ...6qyoi.herokudns.com randomname-123321

Si te equivocas, se pueden borrar con heroku domains:remove www.example.com.

El DNS Target es el que tenemos que introducir en el valor CNAME de los registros DNS de nuestro dominio. El proveedor de dominio en este caso va a ser hostinger.com.

Quedando así:

Type Name Content (DNS Target) TTL
CNAME www.example.com ...6qyoi.herokudns.com ?

En caso de un subdominio, habría que introducir solo su nombre, por ejemplo introduciendo api, apuntaría a api.example.com.

📜 Documentation

Documentation