From 771248443af32d1cde780ce347b67e2b1abc93dd Mon Sep 17 00:00:00 2001 From: Alexandra Franzen Date: Tue, 21 May 2024 13:56:54 +0200 Subject: [PATCH 01/23] added folders for front- and backend --- backend/models/User.js | 14 ++++++++++++++ frontend/src/components/Button.jsx | 0 frontend/src/components/Form.jsx | 0 frontend/src/components/Registration-form.jsx | 0 4 files changed, 14 insertions(+) create mode 100644 backend/models/User.js create mode 100644 frontend/src/components/Button.jsx create mode 100644 frontend/src/components/Form.jsx create mode 100644 frontend/src/components/Registration-form.jsx diff --git a/backend/models/User.js b/backend/models/User.js new file mode 100644 index 000000000..e2e70312d --- /dev/null +++ b/backend/models/User.js @@ -0,0 +1,14 @@ +import mongoose from "mongoose" + +//Schema - the blueprint +const { Schema, model } = mongoose + +const userSchema = new Schema({ + +}) + +//Model +const User = model("User", userSchema) + + +export default User \ No newline at end of file diff --git a/frontend/src/components/Button.jsx b/frontend/src/components/Button.jsx new file mode 100644 index 000000000..e69de29bb diff --git a/frontend/src/components/Form.jsx b/frontend/src/components/Form.jsx new file mode 100644 index 000000000..e69de29bb diff --git a/frontend/src/components/Registration-form.jsx b/frontend/src/components/Registration-form.jsx new file mode 100644 index 000000000..e69de29bb From c44b545aab4719d2cba1d5ec0635536afad8ef07 Mon Sep 17 00:00:00 2001 From: Alexandra Franzen Date: Wed, 22 May 2024 08:09:06 +0200 Subject: [PATCH 02/23] =?UTF-8?q?Co-authored-by:=20Lovisa=20=C3=85berg=20=20Co-authored-by:=20AHPIX?= =?UTF-8?q?I=20?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/src/App.jsx | 10 +++++++++- frontend/src/components/Auth-content.jsx | 16 ++++++++++++++++ frontend/src/components/Button.jsx | 7 +++++++ frontend/src/components/Form.jsx | 0 frontend/src/components/Registration-form.jsx | 6 ++++++ frontend/src/components/SignIn-form.jsx | 7 +++++++ 6 files changed, 45 insertions(+), 1 deletion(-) create mode 100644 frontend/src/components/Auth-content.jsx delete mode 100644 frontend/src/components/Form.jsx create mode 100644 frontend/src/components/SignIn-form.jsx diff --git a/frontend/src/App.jsx b/frontend/src/App.jsx index 1091d4310..4856dc501 100644 --- a/frontend/src/App.jsx +++ b/frontend/src/App.jsx @@ -1,3 +1,11 @@ +import { Registration } from "./components/Registration-form"; +import { SignIn } from "./components/SignIn-form"; + export const App = () => { - return
Find me in src/app.jsx!
; + return ( +
+ + +
+ ); }; diff --git a/frontend/src/components/Auth-content.jsx b/frontend/src/components/Auth-content.jsx new file mode 100644 index 000000000..96a6315b5 --- /dev/null +++ b/frontend/src/components/Auth-content.jsx @@ -0,0 +1,16 @@ +import Button from "./Button" + +//Här ska autentiserat content synas: + +//- A page to show the authenticated content from the API. +//- A 'sign out' button that removes the saved access token and redirects the user to the login form. + + export const Auth = () => { + return ( + <> +
Auth-content
+ + + ); +}; diff --git a/frontend/src/components/Form.jsx b/frontend/src/components/Form.jsx deleted file mode 100644 index e69de29bb..000000000 diff --git a/frontend/src/components/Registration-form.jsx b/frontend/src/components/Registration-form.jsx index e69de29bb..2cb16696f 100644 --- a/frontend/src/components/Registration-form.jsx +++ b/frontend/src/components/Registration-form.jsx @@ -0,0 +1,6 @@ + +export const Registration = () => { + return ( +
Registration-form
+ ) +} diff --git a/frontend/src/components/SignIn-form.jsx b/frontend/src/components/SignIn-form.jsx new file mode 100644 index 000000000..3ea7a440a --- /dev/null +++ b/frontend/src/components/SignIn-form.jsx @@ -0,0 +1,7 @@ +import React from 'react' + +export const SignIn = () => { + return ( +
Sign-in-form
+ ) +} From 5e3b97daea99a2dff96f096b04b0b4b3a791d8af Mon Sep 17 00:00:00 2001 From: Lovisa Date: Wed, 22 May 2024 11:22:18 +0200 Subject: [PATCH 03/23] Created model, and user endpoint --- backend/models/User.js | 22 +++++++++-- backend/package.json | 2 + backend/server.js | 37 ++++++++++++++++++- frontend/src/components/Button.jsx | 6 +-- frontend/src/components/Registration-form.jsx | 11 ++++-- frontend/src/components/SignIn-form.jsx | 10 ++++- package.json | 4 ++ 7 files changed, 80 insertions(+), 12 deletions(-) diff --git a/backend/models/User.js b/backend/models/User.js index e2e70312d..fb8081454 100644 --- a/backend/models/User.js +++ b/backend/models/User.js @@ -1,14 +1,30 @@ import mongoose from "mongoose" +import bcrypt from "bcrypt" //Schema - the blueprint const { Schema, model } = mongoose const userSchema = new Schema({ - -}) + name: { + type: String, + unique: true + }, + email: { + type: String, + unique: true, + }, + password: { + type: String, + required: true + }, + accessToken: { + type: String, + default: () => bcrypt.genSaltSync() + } +}); //Model const User = model("User", userSchema) +export default User -export default User \ No newline at end of file diff --git a/backend/package.json b/backend/package.json index 8de5c4ce0..b75075258 100644 --- a/backend/package.json +++ b/backend/package.json @@ -14,6 +14,8 @@ "@babel/preset-env": "^7.16.11", "cors": "^2.8.5", "express": "^4.17.3", + "install": "^0.13.0", + "mongodb": "^6.6.2", "mongoose": "^8.0.0", "nodemon": "^3.0.1" } diff --git a/backend/server.js b/backend/server.js index dfe86fb8e..ce18d1aa7 100644 --- a/backend/server.js +++ b/backend/server.js @@ -1,6 +1,8 @@ import cors from "cors"; import express from "express"; import mongoose from "mongoose"; +import bcrypt from "bcrypt"; +import User from "./models/User" const mongoUrl = process.env.MONGO_URL || "mongodb://localhost/project-mongo"; mongoose.connect(mongoUrl); @@ -16,12 +18,45 @@ const app = express(); app.use(cors()); app.use(express.json()); + // Start defining your routes here app.get("/", (req, res) => { res.send("Hello Technigo!"); }); +app.post("/users", async (req, res) => { + try { + const { name, email, password } = req.body; + const user = new User({ + name, + email, + password: bcrypt.hashSync(password, 10), + }); + await user.save(); + res.status(201).json({ id: user._id, accessToken: user.accessToken }); + } catch (err) { + res + .status(400) + .json({ message: "Could not create user", error: err.message }); + } +}); + +const authenticateUser = async (req, res, next) => { + const user = await User.findOne({ accessToken: req.header("Authorization") }) + if(user) { + req.user = user + next() + } else { + res.status(401).json({ loggedOut: true }) + } +} + +app.get("secrets", authenticateUser) +app.get("/secrets", async (req, res) => { + res.json({ secret: "this is a super secret message" }); +}); + // Start the server app.listen(port, () => { console.log(`Server running on http://localhost:${port}`); -}); +}); \ No newline at end of file diff --git a/frontend/src/components/Button.jsx b/frontend/src/components/Button.jsx index 2dd67ce2c..758354b28 100644 --- a/frontend/src/components/Button.jsx +++ b/frontend/src/components/Button.jsx @@ -1,7 +1,7 @@ export const Button = () => { return (
- +
- ); -}; + ) +} diff --git a/frontend/src/components/Registration-form.jsx b/frontend/src/components/Registration-form.jsx index 2cb16696f..6520029d4 100644 --- a/frontend/src/components/Registration-form.jsx +++ b/frontend/src/components/Registration-form.jsx @@ -1,6 +1,11 @@ - -export const Registration = () => { +export const Registration = ({}) => { return ( -
Registration-form
+ <> +
+