1.2.3 • Published 9 months ago

easy-auth-mail v1.2.3

Weekly downloads
-
License
MIT
Repository
github
Last release
9 months ago

Easy-auth-mail

Descripción

Al desarrollar una aplicación web que requiere el registro de usuarios es necesario implementar un método de autentificación para evitar que se utilicen correos electronicos falsos que ocupan espacio innecesario en la base de datos.

Para evitar que esto suceda podemos implementar una forma de autentificar que dichos correos son reales enviando un token o código que debe ser ingresado para completar el registro.

Instalación

Para instalar el paquete utiliza npm o pnpm

npm

npm i easy-auth-mail

pnpm

pnpm add easy-auth-mail

Uso/Ejemplos

Por seguridad, evita escribir tus credenciales de tu servicio de correo electronico directamente en el código. Utiliza variables de entorno con dotenv

1) Instala dotenv en tu proyecto

npm
npm install dotenv
pnpm
pnpm add dotenv

2) Crea un archivo llamado .env en la raíz de tu proyecto

3) En el archivo creado escribe las siguientas variables

MAIL_SENDER=<yourmail@domain.com>
PASS_SENDER=<yourpassword>

4) Carga las variables de entorno y declara las variables a utilizar en un archivo de configuración o en alguna parte de tu aplicación para utilizarlas posteriormente

import dotenv from 'dotenv'
dotenv.config()
const user = process.env.MAIL_SENDER
const pass = process.env.PASS_SENDER

5) Finalmente utiliza las funciones del proyecto

// TODO: Importa las funciones 
import { Router } from "express";
import { authenticateUser, authenticateToken, createMailOptions } from "easy-auth-mail/src/index.js";
import UserToken from 'easy-auth-mail/src/models/UserToken.js'
import dotenv from 'dotenv'
dotenv.config()
// carga las variables de entorno
const user = process.env.MAIL_SENDER
const pass = process.env.PASS_SENDER

// crea el transportador (te permitira conectarte con tu servicio de mail)
// indica que tipo de servicio quieres utiliza e ingresa las credenciales para utilizar tu correo. Este objeto puedes crearlo una vez y
// guardarlo en un archivo de configuración
const transport = createTransport({service: 'gmail', auth: {user: user, pass: pass}})

// ejemplo utilizando express
const api = Router()

api.post('/api/signup', async (req, res) => {
    // get credentials from body request
    const { mail, password } = req.body
    if (!mail || !password) return res.status(401).json({ status: 401, message: 'No mail or password received' })
    // create object userToken and generate token 
    const token = new UserToken({ user: { email: mail, password: password } })
    await token.generateToken()
    // create mailOptions
    const mailOptions = await createMailOptions({
        sender: config.user, user: { mail: token.email, token: token.token },
        content: { subject: `Authentication code from Test App` }
    })
    // finally, use authenticateUser to send mail
    await authenticateUser({ userToken: token, transport, config: { timeOutDuration: ((60 * 3) * 1000) }, mailOptions })
    // you can save a temporal session with user value in your db

    // response
    res.status(201).json({ status: 200, message: 'Mail send' })
})

api.post('/api/auth', (req, res) => {
    // get token from body request
    const { token } = req.body
    if (!token) return res.status(401).json({ status: 401, message: 'No token received' })

    // in case token was received - authenticate token
    const isAuthenticated = authenticateToken({ token })
    // if its true you can get from your db the temporal session and save in user table

    // response
    res.status(200).json({ status: isAuthenticated ? 200 : 401, message: isAuthenticated ? 'Authentication success' : 'Error. Invalid token or expired' })
})

Usando un callback al autenticar un token

api.post('/api/auth', (req, res) => {
    // get token from body request
    const { token } = req.body
    if (!token) return res.status(401).json({ status: 401, message: 'No token received' })

    // in case token was received - authenticate token and get token with callback
    const isAuthenticated = authenticateToken({ token, callback: (userToken) => {
        // do somenting like save credentials in your db
    } })

    // response
    res.status(200).json({ status: isAuthenticated ? 200 : 401, message: isAuthenticated ? 'Authentication success' : 'Error. Invalid token or expired' })
})

Para contribuir

Para contribuir visita el siguiente enlace donde se encuenta el repositorio. easy-auth-mail

License

MIT

1.2.3

9 months ago

1.2.2

9 months ago

1.1.1

10 months ago

1.1.0

10 months ago