Skip to content

Commit 540e3ba

Browse files
committed
added login and signup
1 parent c9b0ec8 commit 540e3ba

File tree

7 files changed

+3918
-0
lines changed

7 files changed

+3918
-0
lines changed

api/controllers/user.js

Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,105 @@
1+
const mongoose = require("mongoose");
2+
const bcrypt = require("bcrypt");
3+
const jwt = require("jsonwebtoken");
4+
5+
const User = require("../models/user");
6+
7+
exports.user_signup = (req, res, next) => {
8+
User.find({ email: req.body.email })
9+
.exec()
10+
.then(user => {
11+
if (user.length >= 1) {
12+
return res.status(409).json({
13+
message: "Mail exists"
14+
});
15+
} else {
16+
bcrypt.hash(req.body.password, 10, (err, hash) => {
17+
if (err) {
18+
return res.status(500).json({
19+
error: err
20+
});
21+
} else {
22+
const user = new User({
23+
_id: new mongoose.Types.ObjectId(),
24+
email: req.body.email,
25+
password: hash
26+
});
27+
user
28+
.save()
29+
.then(result => {
30+
console.log(result);
31+
res.status(201).json({
32+
message: "User created"
33+
});
34+
})
35+
.catch(err => {
36+
console.log(err);
37+
res.status(500).json({
38+
error: err
39+
});
40+
});
41+
}
42+
});
43+
}
44+
});
45+
};
46+
47+
exports.user_login = (req, res, next) => {
48+
User.find({ email: req.body.email })
49+
.exec()
50+
.then(user => {
51+
if (user.length < 1) {
52+
return res.status(401).json({
53+
message: "Auth failed"
54+
});
55+
}
56+
bcrypt.compare(req.body.password, user[0].password, (err, result) => {
57+
if (err) {
58+
return res.status(401).json({
59+
message: "Auth failed"
60+
});
61+
}
62+
if (result) {
63+
const token = jwt.sign(
64+
{
65+
email: user[0].email,
66+
userId: user[0]._id
67+
},
68+
process.env.JWT_KEY,
69+
{
70+
expiresIn: "1h"
71+
}
72+
);
73+
return res.status(200).json({
74+
message: "Auth successful",
75+
token: token
76+
});
77+
}
78+
res.status(401).json({
79+
message: "Auth failed"
80+
});
81+
});
82+
})
83+
.catch(err => {
84+
console.log(err);
85+
res.status(500).json({
86+
error: err
87+
});
88+
});
89+
};
90+
91+
exports.user_delete = (req, res, next) => {
92+
User.remove({ _id: req.params.userId })
93+
.exec()
94+
.then(result => {
95+
res.status(200).json({
96+
message: "User deleted"
97+
});
98+
})
99+
.catch(err => {
100+
console.log(err);
101+
res.status(500).json({
102+
error: err
103+
});
104+
});
105+
};

api/middleware/check-auth.js

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
const jwt = require('jsonwebtoken');
2+
3+
module.exports = (req, res, next) => {
4+
try {
5+
const token = req.headers.authorization.split(" ")[1];
6+
const decoded = jwt.verify(token, process.env.JWT_KEY);
7+
req.userData = decoded;
8+
next();
9+
} catch (error) {
10+
return res.status(401).json({
11+
message: 'Auth failed'
12+
});
13+
}
14+
};

api/models/user.js

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
const mongoose = require('mongoose');
2+
3+
const userSchema = mongoose.Schema({
4+
_id: mongoose.Schema.Types.ObjectId,
5+
email: {
6+
type: String,
7+
required: true,
8+
unique: true,
9+
match: /[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?/
10+
},
11+
password: { type: String, required: true }
12+
});
13+
14+
module.exports = mongoose.model('User', userSchema);

api/routes/contracts.js

Whitespace-only changes.

api/routes/user.js

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
const express = require("express");
2+
const router = express.Router();
3+
4+
const UserController = require('../controllers/user');
5+
const checkAuth = require('../middleware/check-auth');
6+
7+
router.post("/signup", UserController.user_signup);
8+
9+
router.post("/login", UserController.user_login);
10+
11+
router.delete("/:userId", checkAuth, UserController.user_delete);
12+
13+
module.exports = router;

api/routes/wallets.js

Whitespace-only changes.

0 commit comments

Comments
 (0)