oktatas:web:back-end_framework:express:azonositas
Különbségek
A kiválasztott változat és az aktuális verzió közötti különbségek a következők.
Előző változat mindkét oldalonElőző változat | |||
oktatas:web:back-end_framework:express:azonositas [2025/07/14 09:52] – [Express - Azonosítás] admin | oktatas:web:back-end_framework:express:azonositas [2025/08/01 10:14] (aktuális) – eltávolítva admin | ||
---|---|---|---|
Sor 1: | Sor 1: | ||
- | [[: | ||
- | |||
- | ====== Express - Azonosítás ====== | ||
- | |||
- | * **Szerző: | ||
- | * Copyright (c) Sallai András, 2023 | ||
- | * Szerkesztve: | ||
- | * Licenc: [[https:// | ||
- | * Web: https:// | ||
- | |||
- | ===== Bevezetés ===== | ||
- | |||
- | Az útvonalak védelmét úgy tudjuk ellátni, ha van felhasználó aki be tud jelentkezni, | ||
- | |||
- | Az útvonalak és a komponensek összekötésénél beállítható, | ||
- | |||
- | A példánkban a jsonwebtoken-t fogjuk használni. A token szerveroldalon keletkezik, de kliens oldalon tároljuk. | ||
- | |||
- | ===== Felhasználó felvétele ===== | ||
- | ==== User modell ==== | ||
- | |||
- | A felhasználók kezeléséhez egy User nevű modellben leírjuk a felhasználóról mit tárolunk. | ||
- | |||
- | <code javascript app/ | ||
- | const { DataTypes } = require(' | ||
- | const sequelize = require(' | ||
- | |||
- | const User = sequelize.define(' | ||
- | id: { | ||
- | type: DataTypes.INTEGER, | ||
- | autoIncrement: | ||
- | primaryKey: true | ||
- | }, | ||
- | name: { type: DataTypes.STRING, | ||
- | email: { type: DataTypes.STRING, | ||
- | password: { type: DataTypes.STRING , allowNull: false } | ||
- | }) | ||
- | |||
- | //A model és az adatbázis szinkronizálása, | ||
- | sequelize.sync({ | ||
- | force: false | ||
- | }) | ||
- | module.exports = User | ||
- | |||
- | </ | ||
- | |||
- | ==== AuthController ==== | ||
- | |||
- | Az Auth kontroller helyett készíthetnék akár egy User kontrollert is, de az Auth névhez jobban illek majd a login() metódus. | ||
- | |||
- | |||
- | Telepítsük a bcryptjs csomagot: | ||
- | |||
- | npm install bcryptjs | ||
- | |||
- | A bcryptjs a bcrypt JavaScriptre optimalizált változata. | ||
- | |||
- | |||
- | Készítsük el az app/ | ||
- | |||
- | <code javascript app/ | ||
- | const bcrypt = require(' | ||
- | |||
- | const User = require(' | ||
- | |||
- | const AuthController = { | ||
- | async register(req, | ||
- | var clientError = false; | ||
- | try { | ||
- | if(!req.body.name || | ||
- | !req.body.email || | ||
- | !req.body.password || | ||
- | !req.body.password_confirmation) { | ||
- | clientError = true | ||
- | throw new Error(' | ||
- | } | ||
- | if(req.body.password != req.body.password_confirmation) { | ||
- | clientError = true | ||
- | throw new Error(' | ||
- | } | ||
- | const user = await User.findOne({ | ||
- | where: { name: req.body.name } | ||
- | }) | ||
- | if(user) { | ||
- | clientError = true | ||
- | throw new Error(' | ||
- | } | ||
- | AuthController.tryRegister(req, | ||
- | } catch (error) { | ||
- | if (clientError) { | ||
- | res.status(400) | ||
- | }else { | ||
- | res.status(500) | ||
- | } | ||
- | await res.json({ | ||
- | success: false, | ||
- | message: ' | ||
- | error: error.message | ||
- | }) | ||
- | } | ||
- | }, | ||
- | async tryRegister(req, | ||
- | const user = { | ||
- | name: req.body.name, | ||
- | email: req.body.email, | ||
- | password: bcrypt.hashSync(req.body.password) | ||
- | } | ||
- | await User.create(user) | ||
- | .then( result => { | ||
- | res.status(201) | ||
- | res.json({ | ||
- | succes: true, | ||
- | data: result | ||
- | }) | ||
- | }) | ||
- | } | ||
- | } | ||
- | |||
- | module.exports = AuthController | ||
- | </ | ||
- | |||
- | ==== Routing ==== | ||
- | |||
- | Írjunk egy új útválasztó sort: | ||
- | <code javascript> | ||
- | const AuthController = require(' | ||
- | //... | ||
- | router.post('/ | ||
- | </ | ||
- | |||
- | |||
- | A teljes kód: | ||
- | |||
- | <code javascript app/ | ||
- | const Router = require(' | ||
- | const router = Router(); | ||
- | |||
- | const EmployeeController = require(' | ||
- | const AuthController = require(' | ||
- | |||
- | router.get('/ | ||
- | router.post('/ | ||
- | router.put('/ | ||
- | router.delete('/ | ||
- | |||
- | router.post('/ | ||
- | |||
- | module.exports = router | ||
- | |||
- | </ | ||
- | |||
- | ===== Bejelentkezés ===== | ||
- | |||
- | ==== APP_KEY ==== | ||
- | |||
- | Vegyük fel a .env fájlban az APP_KEY tulajdonságot: | ||
- | |||
- | <code bash> | ||
- | APP_KEY=3434384383343 | ||
- | </ | ||
- | |||
- | Írjunk bele, legalább 32 számot és betűt. | ||
- | ==== Az authcontroller.js-ben ==== | ||
- | |||
- | <code javascript app/ | ||
- | const jwt = require(' | ||
- | |||
- | //... | ||
- | |||
- | async login(req, res) { | ||
- | | ||
- | try { | ||
- | if(!req.body.name || !req.body.password) { | ||
- | | ||
- | throw new Error(' | ||
- | } | ||
- | const user = await User.findOne({ | ||
- | where: { name: req.body.name } | ||
- | }) | ||
- | |||
- | if(!user) { | ||
- | res.status(404) | ||
- | throw new Error(' | ||
- | } | ||
- | var passwordIsValid = await bcrypt.compare( | ||
- | req.body.password, | ||
- | user.dataValues.password | ||
- | ); | ||
- | if(!passwordIsValid) { | ||
- | res.status(401) | ||
- | throw new Error(' | ||
- | } | ||
- | AuthController.tryLogin(req, | ||
- | |||
- | } catch (error) { | ||
- | res.json({ | ||
- | success: false, | ||
- | message: ' | ||
- | error: error.message | ||
- | }) | ||
- | } | ||
- | }, | ||
- | async tryLogin(req, | ||
- | var token = jwt.sign({ id: user.id }, config.app.key, | ||
- | expiresIn: 86400 //24 óra | ||
- | }) | ||
- | res.status(200).json({ | ||
- | id: user.id, | ||
- | name: user.name, | ||
- | email: user.email, | ||
- | accessToken: | ||
- | }) | ||
- | } | ||
- | } | ||
- | </ | ||
- | |||
- | ==== Útválasztás ==== | ||
- | |||
- | <code javascript> | ||
- | router.post('/ | ||
- | </ | ||
- | |||
- | |||
- | ===== Útvonal védelme ===== | ||
- | |||
- | ==== Token ellenőrző köztes szoftver ==== | ||
- | |||
- | <code javascript app/ | ||
- | const jwt = require(" | ||
- | require(' | ||
- | |||
- | exports.verifyToken = (req, res, next) => { | ||
- | let authData = req.headers.authorization; | ||
- | if(!authData) { | ||
- | return res.status(403).send({ | ||
- | message: 'No token provided!' | ||
- | }) | ||
- | } | ||
- | let token = authData.split(' | ||
- | |||
- | jwt.verify(token, | ||
- | if(err) { | ||
- | return res.status(401).send({ | ||
- | message: " | ||
- | }) | ||
- | } | ||
- | req.userId = decoded.id; | ||
- | next() | ||
- | }) | ||
- | }; | ||
- | </ | ||
- | |||
- | |||
- | ==== Útválasztás ==== | ||
- | |||
- | <code javascript> | ||
- | const { verifyToken } = require(' | ||
- | //... | ||
- | router.post('/ | ||
- | |||
- | </ | ||
- | |||
- | |||
- | Ellenőrzés, | ||
- | |||
- | < | ||
- | http post localhost: | ||
- | name=' | ||
- | -A bearer -a eyJhbG | ||
- | </ | ||
- | |||
- | A -a után a token írjuk, ami valójában jóval hosszabb. | ||
- | |||
- | |||
- | Állítsuk be az update és delete műveletre is: | ||
- | |||
- | <code javascript> | ||
- | router.delete('/ | ||
- | router.put('/ | ||
- | </ | ||
- | |||
oktatas/web/back-end_framework/express/azonositas.1752479542.txt.gz · Utolsó módosítás: 2025/07/14 09:52 szerkesztette: admin