Skip to content

Commit d284ce3

Browse files
author
Matheus Ishiyama
authored
Fix confirm email (#6)
2 parents a655b83 + cda2050 commit d284ce3

File tree

15 files changed

+78
-56
lines changed

15 files changed

+78
-56
lines changed

package.json

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,8 @@
99
"test": "jest"
1010
},
1111
"jest": {
12-
"testEnvironment": "node"
12+
"testEnvironment": "node",
13+
"slowTestThreshold": 10
1314
},
1415
"repository": {
1516
"type": "git",
@@ -24,7 +25,7 @@
2425
"homepage": "https://github.com/MatheusIshiyama/chat-app-backend#readme",
2526
"dependencies": {
2627
"bcrypt": "^5.0.1",
27-
"crypto": "^1.0.1",
28+
"cors": "^2.8.5",
2829
"dotenv": "^8.2.0",
2930
"email-validator": "^2.0.4",
3031
"express": "^4.17.1",

src/app.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
const express = require("express");
2+
const cors = require('cors');
23

34
//* express setup
45
const app = express();
6+
app.use(cors());
57
app.use(express.json());
68
app.use(express.urlencoded({ extended: true }));
79

src/controllers/user.js

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,18 @@ const crypto = require("crypto");
22
const User = require("../models/user");
33
const sendMail = require("../services/sendMail");
44
const password = require("../services/password");
5+
const generateCode = require("../services/generateCode");
56

67
const UserController = {
78
async register(req, res) {
89
const body = req.body;
910
const hashPassword = password.hash(body.password);
10-
const verifyCode = crypto.randomBytes(128).toString("base64");
11+
const code = generateCode();
1112
const newUser = new User({
1213
username: body.username.toLowerCase(),
1314
name: body.name,
1415
email: body.email,
15-
verifyCode,
16+
code,
1617
verified: false,
1718
password: hashPassword,
1819
createdAt: Date.now(),
@@ -25,20 +26,20 @@ const UserController = {
2526
{ _id: false, password: false }
2627
);
2728

28-
await sendMail(body.email, verifyCode, "Confirm register");
29+
await sendMail(body.email, code, "Confirm register");
2930

3031
return res.status(201).json({ user });
3132
},
3233

3334
async confirm(req, res) {
34-
const { verifyCode } = req.params;
35+
const { code } = req.body;
3536

3637
await User.findOneAndUpdate(
37-
{ verifyCode },
38-
{ verifyCode: "verified", verified: true }
38+
{ code },
39+
{ code: "verified", verified: true }
3940
);
4041

41-
return res.status(200).json({ error: "User confirmed" });
42+
return res.status(200).json({ message: "User confirmed" });
4243
},
4344

4445
async addPending(req, res) {

src/middlewares/validateCode.js

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
const validateCode = (req, res, next) => {
2-
if (!req.params.verifyCode)
3-
return res.status(400).json({ error: "No verifyCode provided" });
2+
const { code } = req.body;
43

5-
if (req.params.verifyCode.length !== 172)
6-
return res.status(400).json({ error: "No verifyCode length accept" });
4+
if (!code) return res.status(400).json({ error: "No code provided" });
5+
6+
if (code.length !== 8)
7+
return res.status(400).json({ error: "No code length accept" });
78

89
next();
910
};
1011

11-
module.exports = validateCode;
12+
module.exports = validateCode;

src/models/user.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ const User = new database.Schema(
55
username: String,
66
name: String,
77
email: String,
8-
verifyCode: String,
8+
code: String,
99
verified: Boolean,
1010
password: String,
1111
createdAt: Date,

src/routes/auth.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
const express = require("express");
22
const authRoutes = express.Router();
33
const authenticate = require("../services/authenticate");
4-
const validateAuth = require('../middlewares/validateAuth');
4+
const validateAuth = require("../middlewares/validateAuth");
55

6-
authRoutes.post("/", validateAuth, (req, res) => {
6+
authRoutes.post("/", validateAuth, async (req, res) => {
77
const { username, password } = req.body;
8-
authenticate(username, password, res);
8+
await authenticate(username, password, res);
99
});
1010

1111
module.exports = authRoutes;

src/routes/user.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ userRoutes.post("/register", validateRegister, (req, res) => {
1212
UserController.register(req, res);
1313
});
1414

15-
userRoutes.get("/confirm/:verifyCode", validateCode, (req, res) => {
15+
userRoutes.post("/confirm", validateCode, (req, res) => {
1616
UserController.confirm(req, res);
1717
});
1818

src/services/authenticate.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ const authenticate = async (username, password, res) => {
1010
if (!password)
1111
return res.status(400).json({ error: "No password provided" });
1212

13+
username = username.toLowerCase();
14+
1315
const userExists = await User.findOne({ username });
1416

1517
if (userExists) {
@@ -29,9 +31,7 @@ const authenticate = async (username, password, res) => {
2931
return res.status(202).json({ token });
3032
}
3133

32-
return res
33-
.status(401)
34-
.json({ error: "Invalid username or password" });
34+
return res.status(401).json({ error: "Invalid username or password" });
3535
}
3636
return res.status(401).json({ error: "Invalid username or password" });
3737
};

src/services/generateCode.js

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
const generateCode = () => {
2+
var result = [];
3+
const characters =
4+
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
5+
var charactersLength = characters.length;
6+
for (var i = 0; i < 8; i++) {
7+
result.push(
8+
characters.charAt(Math.floor(Math.random() * charactersLength))
9+
);
10+
}
11+
return result.join("");
12+
};
13+
14+
module.exports = generateCode;

src/services/sendMail.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,9 @@ const transporter = nodeMailer.createTransport({
1010
},
1111
});
1212

13-
const sendEmail = async (email, verifyCode, subject) => {
13+
const sendEmail = async (email, code, subject) => {
1414
if (!email) return "No email provided";
15-
if (!verifyCode) return "No verifyCode provided";
15+
if (!code) return "No code provided";
1616
if (!subject) return "No subject provided";
1717

1818
const isValid = validateBody.email(email);
@@ -22,7 +22,7 @@ const sendEmail = async (email, verifyCode, subject) => {
2222
from: process.env.EMAIL,
2323
to: email,
2424
subject,
25-
text: `${process.env.CONFIRM_URL}/${verifyCode}`,
25+
text: `Verify code is:\n ${code}`,
2626
};
2727

2828
await transporter.sendMail(mailOptions);

0 commit comments

Comments
 (0)