email-only-auth
v1.0.6
Published
Library helps developers to add the email only auth.
Downloads
3
Readme
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
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:"[email protected]",
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.