From 897d5a891f1f0039105f0316b4b0be54c1d7c0b3 Mon Sep 17 00:00:00 2001 From: blankuet Date: Tue, 4 Jun 2024 17:21:13 +0200 Subject: [PATCH 1/3] iteration 1 done: User model --- models/User.model.js | 23 ++++++++++++++++++++--- package.json | 4 +++- routes/index.js | 3 +++ 3 files changed, 26 insertions(+), 4 deletions(-) diff --git a/models/User.model.js b/models/User.model.js index 9cdd3a3ce4..5c87d1196e 100644 --- a/models/User.model.js +++ b/models/User.model.js @@ -4,10 +4,27 @@ const { Schema, model } = require("mongoose"); const userSchema = new Schema({ username: { type: String, - unique: true + required: false, + unique: true, + trim: true, }, - password: String -}); + email: { + type: String, + required: true, + unique: true, + trim: true, + lowercase: true, + }, + password: { + type: String, + required: true, + }, +}, +{ + // this second object adds extra properties: `createdAt` and `updatedAt` + timestamps: true, +} +); const User = model("User", userSchema); diff --git a/package.json b/package.json index 19489d9695..3e6cd42636 100644 --- a/package.json +++ b/package.json @@ -7,9 +7,11 @@ "dev": "nodemon server.js" }, "dependencies": { + "bcryptjs": "^2.4.3", + "connect-mongo": "^5.1.0", "cookie-parser": "^1.4.5", "dotenv": "^8.2.0", - "express": "^4.17.1", + "express": "^4.19.2", "hbs": "^4.1.1", "mongoose": "^6.1.2", "morgan": "^1.10.0", diff --git a/routes/index.js b/routes/index.js index 81c2396ceb..cbd3057e59 100644 --- a/routes/index.js +++ b/routes/index.js @@ -5,4 +5,7 @@ router.get("/", (req, res, next) => { res.render("index"); }); +router.post("/signup", (req, res) => { + res.json(req.body) +}) module.exports = router; From eea08abf57da361f6a7339ad7bd0ca67b6bb39e6 Mon Sep 17 00:00:00 2001 From: blankuet Date: Tue, 4 Jun 2024 17:24:46 +0200 Subject: [PATCH 2/3] iteration 1 done --- models/User.model.js | 2 +- routes/index.js | 18 +++++++++++++++--- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/models/User.model.js b/models/User.model.js index 5c87d1196e..d84969204b 100644 --- a/models/User.model.js +++ b/models/User.model.js @@ -4,7 +4,7 @@ const { Schema, model } = require("mongoose"); const userSchema = new Schema({ username: { type: String, - required: false, + required: true, unique: true, trim: true, }, diff --git a/routes/index.js b/routes/index.js index cbd3057e59..676b9891bb 100644 --- a/routes/index.js +++ b/routes/index.js @@ -5,7 +5,19 @@ router.get("/", (req, res, next) => { res.render("index"); }); -router.post("/signup", (req, res) => { - res.json(req.body) -}) +router.post('/signup', async (req, res) => { + const { username, email, password } = req.body; + if (!username || !email || !password) { + return res.status(400).json({ message: 'Todos los campos son obligatorios.' }); + } + try { + const salt = await bcrypt.genSalt(10); + const hashedPassword = await bcrypt.hash(password, salt); + const newUser = await User.create({ username, email, password: hashedPassword }); + res.status(201).json(newUser); + } catch (error) { + res.status(500).json({ message: 'Error al crear el usuario.' }); + } +}); + module.exports = router; From 5aafa16bf08651fe1d15f7059462321ced4076d3 Mon Sep 17 00:00:00 2001 From: blankuet Date: Tue, 4 Jun 2024 18:20:52 +0200 Subject: [PATCH 3/3] signup done --- package.json | 2 +- routes/index.js | 4 +++- views/auth/login.hbs | 0 views/auth/signup.hbs | 14 ++++++++++++++ views/index.hbs | 2 +- 5 files changed, 19 insertions(+), 3 deletions(-) create mode 100644 views/auth/login.hbs create mode 100644 views/auth/signup.hbs diff --git a/package.json b/package.json index 3e6cd42636..a7763e69e4 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "private": true, "scripts": { "start": "node server.js", - "dev": "nodemon server.js" + "dev": "nodemon server.js -e hbs, css" }, "dependencies": { "bcryptjs": "^2.4.3", diff --git a/routes/index.js b/routes/index.js index 676b9891bb..910788ddb4 100644 --- a/routes/index.js +++ b/routes/index.js @@ -1,8 +1,10 @@ const router = require("express").Router(); +const User = require("../models/User.model"); +const bcrypt = require("bcryptjs") /* GET home page */ router.get("/", (req, res, next) => { - res.render("index"); + res.render("auth/signup"); }); router.post('/signup', async (req, res) => { diff --git a/views/auth/login.hbs b/views/auth/login.hbs new file mode 100644 index 0000000000..e69de29bb2 diff --git a/views/auth/signup.hbs b/views/auth/signup.hbs new file mode 100644 index 0000000000..29286d812f --- /dev/null +++ b/views/auth/signup.hbs @@ -0,0 +1,14 @@ +

Sign up to our app

+ +
+ + + + +
\ No newline at end of file diff --git a/views/index.hbs b/views/index.hbs index 1f308fdb35..0230acf8b6 100644 --- a/views/index.hbs +++ b/views/index.hbs @@ -1,2 +1,2 @@

{{title}}

-

Welcome to {{title}}

+

Welcome to {{title}}, {{user.username}}