xxxxxxxxxx
const express = require("express");
const router = express.Router();
const crypto = require("crypto");
const sendMail = require("./sendMail");
const { User } = require("./models");
router.post("/register", async (req, res) => {
try {
const { email, password } = req.body;
const emailToken = crypto.randomBytes(64).toString("hex");
// Create the user in the database
const newUser = await User.create({
email,
password,
emailToken,
});
sendMail(email, emailToken);
// Respond with success
res.status(201).json({ message: "User created successfully" });
} catch (error) {
console.error("Error creating user:", error);
res.status(500).json({ message: "Internal server error" });
}
});
router.patch("/verifyemail", async (req, res) => {
const emailToken = req.body.emailToken;
console.log(emailToken)
if (!emailToken) {
return res.status(400).json({ status: "Failed", error: "empty request" });
}
let user = await User.findOne({ where: { emailToken: emailToken } });
if (!user) {
return res.status(404).json({ status: "Failed", error: "User not found" });
}
await User.update(
{ isVerifiedEmail: true, emailToken: null },
{ where: { emailToken: emailToken } }
);
await User.findOne({ where: { emailToken: emailToken } });
return res
.status(200)
.json({ status: "Success", message: "User verified successfully" });
});
module.exports = router;
xxxxxxxxxx
const express = require('express');
const jwt = require('jsonwebtoken');
const app = express();
const PORT = 3000;
app.get('/verify/:token', (req, res)=>{
const {token} = req.params;
// Verifying the JWT token
jwt.verify(token, 'ourSecretKey', function(err, decoded) {
if (err) {
console.log(err);
res.send("Email verification failed,
possibly the link is invalid or expired");
}
else {
res.send("Email verifified successfully");
}
});
});
app.listen(PORT, (error) =>{
if(!error)
console.log("Server is Successfully Running,
and App is listening on port "+ PORT)
else
console.log("Error occurred, server can't start", error);
}
);
xxxxxxxxxx
const express = require('express');
const jwt = require('jsonwebtoken');
const app = express();
const PORT = 3000;
app.get('/verify/:token', (req, res)=>{
const {token} = req.params;
// Verifying the JWT token
jwt.verify(token, 'ourSecretKey', function(err, decoded) {
if (err) {
console.log(err);
res.send("Email verification failed,
possibly the link is invalid or expired");
}
else {
res.send("Email verifified successfully");
}
});
});
app.listen(PORT, (error) =>{
if(!error)
console.log("Server is Successfully Running,
and App is listening on port "+ PORT)
else
console.log("Error occurred, server can't start", error);
}
);
xxxxxxxxxx
const nodemailer = require('nodemailer');
const jwt = require('jsonwebtoken');
const transporter = nodemailer.createTransport({
service: 'gmail',
auth: {
user: secure_configuration.EMAIL_USERNAME,
pass: secure_configuration.PASSWORD
}
});
const token = jwt.sign({
data: 'Token Data' .
}, 'ourSecretKey', { expiresIn: '10m' }
);
const mailConfigurations = {
// It should be a string of sender/server email
from: 'mrtwinklesharma@gmail.com',
to: 'smtwinkle451@gmail.com',
// Subject of Email
subject: 'Email Verification',
// This would be the text of email body
text: `Hi! There, You have recently visited
our website and entered your email.
Please follow the given link to verify your email
http://localhost:3000/verify/${token}
Thanks`
};
transporter.sendMail(mailConfigurations, function(error, info){
if (error) throw Error(error);
console.log('Email Sent Successfully');
console.log(info);
});
xxxxxxxxxx
const express = require("express")
const bodyparser = require("body-parser");
const cors = require("cors");
const db = require("./models")
const userRoutes = require("./UserRoute");
const app = express()
app.use(express.json())
//middleware
app.use(cors());
app.use(bodyparser.json());
app.use("/api/user", userRoutes);
app.use((err, req, res, next) => {
console.log(err);
res.status(err.status || 500).send("Something went wrong!");
});
db.sequelize.sync().then(() => {
app.listen(3000, () => {
console.log("Server running on port 3000");
});
});
xxxxxxxxxx
module.exports = (sequelize, DataTypes) => {
const User = sequelize.define("User", {
email: {
type: DataTypes.STRING,
allowNull: false,
},
password: {
type: DataTypes.STRING,
allowNull: false,
},
isVerifiedEmail: {
type:DataTypes.BOOLEAN,
defaultValue: false,
},
emailToken: {
type: DataTypes.STRING,
},
});
return User;
};
xxxxxxxxxx
const express = require("express");
const router = express.Router();
const crypto = require("crypto");
const sendMail = require("./sendMail");
const { User } = require("./models");
router.post("/register", async (req, res) => {
try {
const { email, password } = req.body;
const emailToken = crypto.randomBytes(64).toString("hex");
// Create the user in the database
const newUser = await User.create({
email,
password,
emailToken,
});
sendMail(email, emailToken);
res.status(201).json({ message: "User created successfully" });
} catch (error) {
console.error("Error creating user:", error);
res.status(500).json({ message: "Internal server error" });
}
});
xxxxxxxxxx
const nodemailer = require("nodemailer");
const sendMail = (email,emailToken) => {
const transporter = nodemailer.createTransport({
service: "gmail",
host: "smtp.gmail.com",
port: 587,
secure: false,
auth: {
user: "Enter your gemail here",
pass: "Enter your app password here",
},
});
const mailOptions = {
from: '"Your company" <your email>',
to: `${email}`,
subject: 'Please verify your email...',
html:`<p>Hello, verify your email address by clicking on this</p>
<br>
<a href="http://localhost:5173/verify-email?emailToken=${emailToken}">Click here to verify</a>
`
};
transporter.sendMail(mailOptions, function(error, info){
if (error) {
console.log(error);
} else {
console.log('Email sent: ' + info.response);
}
});
}
module.exports = sendMail;
xxxxxxxxxx
import React, { useEffect, useState } from 'react'
import axios from 'axios'; // Import axios
import { useLocation } from 'react-router-dom'; // Import useLocation
function VerifyUserEmail() {
const location = useLocation();
const [isVerified, setisVerified] = useState(false);
useEffect(()=>{
const handle = async () => {
try {
const params = new URLSearchParams(location.search);
const emailToken = params.get('emailToken');
const response = await axios.patch('http://localhost:3000/api/user/verifyemail', {
emailToken: emailToken
});
if(response.data.status === "Success"){
setisVerified(true);
}
console.log(response);
} catch (error) {
console.log(error);
}
};
handle();
},[])
return (
<div>
{isVerified ? <h1>Your email has been verified</h1> : <h1>Verifying your email...</h1>}
</div>
)
}
export default VerifyUserEmail;