1.0.6 • Published 1 year ago

email-only-auth v1.0.6

Weekly downloads
-
License
ISC
Repository
github
Last release
1 year ago

What is this?

This is the module used to authenticate the user with email. all the token signing, verifing and sending an email to the users mail are take care of this module. The main part of this module is jsonwebtoken and nodemailer.

For more details about jsonwebtoken and nodemailer visit jsonwebtoken, nodemailer.

Table of Content

  1. Installation
  2. Import Syntax
  3. Example
  4. Future plan

    Installation

    npm i email-only-auth

Import Syntax and example

Mail Server Configuration.

const {configMailService} = require('email-only-auth');

or

import {configMailService} from 'email-only-auth';


let isLocal = false;  //  true for local SMTP connection, false for configure our SMTP connection
//  creating configuration data for SMTP connection in nodemailer.
//  more information please visit nodemailer and sendinblue.com.
const mailConfig = {
    host:'smtp-relay.sendinblue.com',
    port:587,
    secure:false,
    auth:{
      user:'*********@gmail.com',
      pass:'*************'
    }
}
  const mailConfiguration = async () => {
    const result = await configMailService(isLocal,mailConfig);
    console.log(result);
  }
       
// and it calling from the root file like this

mailConfiguration();

Send and verify magic link.

const {sendMagicLink, verifyMagicLink} = require('email-only-auth');

or

import {sendMagicLink, verifyMagicLink} from 'email-only-auth';


const JWTSecret = 'secretforemailonlyauth'; // JWT secret
const url = 'http://localhost:3000/users/verify'; // url to send magic link
const tokenExpiration = '1h'; // token expiration time in hours

//  user information that we need to create the token using JWT, 
//  and email information that we need to send the token
const data = {
    userInfo :{
        id:1,
        username:"sidhik"
    },
    // email information that we need to send to the user
    emailInfo:{
        from:"sidhh1994@gmail.com",
        to:"***********@gmail.com",
        subject:"Hello world",
        text:"This is for sample text",
        html:"<a href='http://localhost:3000'>Link</a>", // add either html content or create template and send the path.
        templatePath: path.join(__dirname,'../template/authTemplate/template.html'), //path of the html template.
        templateContext: {              //  values that added to the template dynamically eg: <h1>{{title}}<h1/> => <h1>Email validation<h1/>
            title:"Email validation",
        }
    }
}

// in the post request we can call the function like this:

router.post('/login', async function(req, res, next) {
  const {email} = req.body;
  if (email) {
    data.emailInfo.to = email;
    let result = await sendMagicLink(url,data,tokenExpiration,JWTSecret);
    res.send(result); 
  }
});

// in the get request we can call the function like this:

router.get('/verify', function(req, res, next) {
  const token = req.query.token
  const isValid = verifyMagicLink(token,JWTSecret);
  res.send(isValid);
});

Example

for more detailed examples, please refer to the github page.

Future plan

  • Provide sample templates.
  • Better Documentation.
1.0.6

1 year ago

1.0.5

1 year ago

1.0.4

1 year ago

1.0.3

1 year ago

1.0.1

1 year ago

1.0.0

1 year ago