diff --git a/daily-thought-user-service/.gitignore b/daily-thought-user-service/.gitignore index 4d7214d9968aaf2f83a2ce9e91a67c9d34ac56fd..bc23c72b9490b234f4b686386aef1b7ef2b3ed4b 100644 --- a/daily-thought-user-service/.gitignore +++ b/daily-thought-user-service/.gitignore @@ -5,6 +5,7 @@ /.pnp .pnp.js server/node_modules +server/config.js # testing /coverage diff --git a/daily-thought-user-service/server/controllers/appController.js b/daily-thought-user-service/server/controllers/appController.js index cb379cda62bb41ac97d79c6e8882a920dd47f667..4b45351d4455c85d53c5a32ce960fd5241950dfb 100644 --- a/daily-thought-user-service/server/controllers/appController.js +++ b/daily-thought-user-service/server/controllers/appController.js @@ -1,5 +1,7 @@ import UserModel from '../model/User.model.js'; import bcrypt from 'bcrypt'; +import jwt from 'jsonwebtoken'; +import ENV from '../config.js' /** POST: http://localhost:8080/api/register * @param : { @@ -74,5 +76,40 @@ export async function register(req,res){ } */ export async function login(req,res){ - res.json('login route') + + const { username, password } = req.body; + + try { + + UserModel.findOne({ username }) + .then(user => { + bcrypt.compare(password, user.password) + .then(passwordCheck => { + + if(!passwordCheck) return res.status(400).send({ error: "Don't have Password"}); + + // create jwt token + const token = jwt.sign({ + userId: user._id, + username : user.username + }, ENV.JWT_SECRET , { expiresIn : "24h"}); + + return res.status(200).send({ + msg: "Login Successful...!", + username: user.username, + token + }); + + }) + .catch(error =>{ + return res.status(400).send({ error: "Password does not Match"}) + }) + }) + .catch( error => { + return res.status(404).send({ error : "Username not Found"}); + }) + + } catch (error) { + return res.status(500).send({ error}); + } } \ No newline at end of file diff --git a/daily-thought-user-service/server/package-lock.json b/daily-thought-user-service/server/package-lock.json index 9de5ea5b11d8e37d86c773567193fc44a5b0b3e5..1adac70d88b3754a6f0c43cf9183d461af1b348a 100644 --- a/daily-thought-user-service/server/package-lock.json +++ b/daily-thought-user-service/server/package-lock.json @@ -12,6 +12,7 @@ "bcrypt": "^5.1.0", "cors": "^2.8.5", "express": "^4.18.2", + "jsonwebtoken": "^9.0.0", "mongodb-memory-server": "^8.10.2", "mongoose": "^6.8.0", "morgan": "^1.10.0", @@ -1436,6 +1437,11 @@ "node": "*" } }, + "node_modules/buffer-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==" + }, "node_modules/buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", @@ -1641,6 +1647,14 @@ "node": ">=8" } }, + "node_modules/ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, "node_modules/ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", @@ -2136,6 +2150,45 @@ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" }, + "node_modules/jsonwebtoken": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.0.tgz", + "integrity": "sha512-tuGfYXxkQGDPnLJ7SibiQgVgeDgfbPq2k2ICcbgqW8WxWLBAxKQM/ZCu/IT8SOSwmaYl4dpTFCW5xZv7YbbWUw==", + "dependencies": { + "jws": "^3.2.2", + "lodash": "^4.17.21", + "ms": "^2.1.1", + "semver": "^7.3.8" + }, + "engines": { + "node": ">=12", + "npm": ">=6" + } + }, + "node_modules/jsonwebtoken/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/jwa": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", + "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", + "dependencies": { + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/jws": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", + "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", + "dependencies": { + "jwa": "^1.4.1", + "safe-buffer": "^5.0.1" + } + }, "node_modules/kareem": { "version": "2.5.1", "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.5.1.tgz", @@ -2155,6 +2208,11 @@ "node": ">=8" } }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, "node_modules/lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", diff --git a/daily-thought-user-service/server/package.json b/daily-thought-user-service/server/package.json index f469a841da8710ab806d77b3752e983ab9f5acf4..0b7228d683d503161dff2cc7ef150ed18e87984c 100644 --- a/daily-thought-user-service/server/package.json +++ b/daily-thought-user-service/server/package.json @@ -14,6 +14,7 @@ "bcrypt": "^5.1.0", "cors": "^2.8.5", "express": "^4.18.2", + "jsonwebtoken": "^9.0.0", "mongodb-memory-server": "^8.10.2", "mongoose": "^6.8.0", "morgan": "^1.10.0",