Features · Installation · Configuration · Deploying · Docs
High secure authentication API built with NodeJS
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.
- Instalation
- Configuration
- API
- Database
- Custom domain
- Email sending
- Deploying
- ✅ 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.
- ✅ Well-defined endpoints for each authentication step.
- ✅ Solid unit testing.
- ✅ Easy app configuration using
app.config.json
file
- ✅ Sign up.
- ✅ Sign in.
- ✅ Restore password.
- ✅ Verify user email.
- ⬜ Sign in/up with social [
Apple, Google
] - ⬜ Biometric Authentification
- Clone the repository
git clone https://github.com/alexdeploy/node-auth-api.git
- Navigate to project directory.
cd node-auth-api
- 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.
[soon...]
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
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.
Creamos una nueva app en heroku
heroku create -a app-name
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)
Ahora vamos a configurar nuestras variables de entorno en heroku.
Introducimos todos las claves y valores del archivo .env
.
heroku config:set NOMBRE_VARIABLE=valor
Comprobamos que se han guardado correctamente
heroku config
# 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
➕ Proveedor de dominio
Vamos a hacerlo utilizando los comandos de Heroku CLI.
Pero también puedes ver de forma más detallada cómo configurar un dominio personalizado en Heroku.
Añadimos un dominio a nuestro Heroku
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.
¿Hay que borrar todos los otros valores CNAME del dominio?
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
.