Estoy tratando de hacer un sistema de inicio de sesión con autorización, lamentablemente el token no se transfiere.
const path = require('path'); const express = require('express'); const bodyParser = require('body-parser'); const urlencodedParser = bodyParser.urlencoded({ extended: false }); const mysql = require('mysql'); const validator = require('validator'); const jwt = require('jsonwebtoken'); require('dotenv').config().ACCESS_TOKEN; const ACCESS_TOKEN = process.env.ACCESS_TOKEN; const app = express(); app.use(express.json()); const publicDirectoryPath = path.join(__dirname, '../public'); console.log(publicDirectoryPath); app.use(express.static(publicDirectoryPath)); function generateAccessToken(username) { return jwt.sign(username, ACCESS_TOKEN, { expiresIn: '1800s' }); } app.post('/login', urlencodedParser, (req, res) => { res.get(req.body.username + req.body.password); const token = generateAccessToken({ username: req.body.username }); res.json(token); }); function authenticateToken(req, res, next) { const authHeader = req.headers['authorization'] const token = authHeader && authHeader.split(' ')[1] console.log(token) if (token == null) return res.sendStatus(401) jwt.verify(token, ACCESS_TOKEN, (err, user) => { console.log(err) if (err) return res.sendStatus(403) req.user = user next() }) } app.get('/admin', authenticateToken, (req, res) => { res.send("admin panel"); }) const port = 3000; app.listen(port, () => { console.log(`Server run: http://localhost:${port}`); })quiere que sea redirigido al panel de administración después de hacer clic en el botón de inicio de sesión. Sin embargo, estoy atascado en esta etapa y no sé qué hacer a continuación: ingrese la descripción de la imagen aquí
Debes pasar el token a la siguiente ruta.
const path = require('path'); const express = require('express'); const bodyParser = require('body-parser'); const urlencodedParser = bodyParser.urlencoded({ extended: false }); const mysql = require('mysql'); const validator = require('validator'); const jwt = require('jsonwebtoken'); require('dotenv').config().ACCESS_TOKEN; const ACCESS_TOKEN = process.env.ACCESS_TOKEN; const app = express(); app.use(express.json()); const publicDirectoryPath = path.join(__dirname, '../public'); console.log(publicDirectoryPath); app.use(express.static(publicDirectoryPath)); function generateAccessToken(username) { return jwt.sign(username, 'ACCESS_TOKEN', { expiresIn: '1800s' }); } app.post('/login', urlencodedParser, (req, res) => { res.get(req.body.username + req.body.password); const token = generateAccessToken({ username: req.body.username }); res.redirect(`/admin?token=${token}`); }); function authenticateToken(req, res, next) { token = req.query.token; if (token == null) return res.sendStatus(401); jwt.verify(token, 'ACCESS_TOKEN', (err, user) => { console.log(err); if (err) return res.sendStatus(403); req.user = user; next(); }); } app.get('/admin', authenticateToken, (req, res) => { res.send('admin panel'); }); const port = 3000; app.listen(port, () => { console.log(`Server run: http://localhost:${port}`); });