Я пытаюсь подключить свое серверное приложение к клиентской стороне, но не могу понять, как это сделать. Я использую MySQL.
Итак ... Моя серверная часть в порядке:
приложение. js
//-------------------- DATABASE CONNECTION --------------------//
const db = require('./database')
db.start.connect((err) =>{
if(err){
console.log('Error connecting to the database :(')
}
else{
console.log('Connected with MySQL database with success! Yay :)')
}
})
//authentication
app.post('/login', (req, res, next) => {
// 1) Check if email and password exist
if (!req.body.username || !req.body.password) {
return res.json({
message: 'Please provide email and password'
});
}
// 2) Check if user exists && password is correct
db.start.query('SELECT * FROM users WHERE username = ?', [req.body.username], async (error, results) => {
console.log(results);
if(!results || req.body.password != results[0].password){
return res.json({message:'Incorrect username or password'})
}
else if(req.body.username == results[0].username && req.body.password == results[0].password){
// 3) If everything ok, send token to client
const id = results[0].id;
console.log(id);
var token = jwt.sign({ id }, process.env.SECRET, {
expiresIn: 300 // expires in 5min
});
res.render('index')
return res.json({ auth: true, token: token });
}
else{
res.status(500).json({message: 'Meh!'});
}
});
})
маршруты / пользователи. js
require("dotenv-safe").config();
var jwt = require('jsonwebtoken');
router.get('/users', verifyJWT, (req, res, next) => {
db.start.query('SELECT * FROM users', function(error, results){
if (error) {
console.log("Ups! Error.")
}
else {
console.log("Everything's fine.")
res.jsonp(results);
}
})
});
function verifyJWT(req, res, next){
var token = req.headers['x-access-token'];
if (!token) return res.status(401).json({ auth: false, message: 'No token provided.' });
jwt.verify(token, process.env.SECRET, function(err, decoded) {
if (err) return res.status(500).json({ auth: false, message: 'Failed to authenticate token.' });
// se tudo estiver ok, salva no request para uso posterior
req.userId = decoded.id;
next();
});
}
И если я протестирую это с почтальоном, все работает нормально. Но я пытаюсь повысить свои навыки, поэтому то, что я пытался сделать, было примерно таким:
Backend
- app. js
- база данных. js
- маршруты - пользователи. js
Frontend
- app. js
И в моей папке frotend я получил:
app. js
...
app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());
app.use(cookieParser());
var db = require('../backend/database')
var jwt = require('jsonwebtoken');
require("dotenv-safe").config({path:'../backend/.env'});
const indexRouter = require('./routes/index')
app.use('/', indexRouter)
//------------------------------------------------------------------------//
var passport = require('passport')
var JwtStrategy =require('passport-jwt').Strategy, ExtractJwt = require('passport-jwt').ExtractJwt
passport.use(new JwtStrategy({ //this is probably wrong
secretOrKey: "mysecret"
}, (payload, callback) => callback(null, payload)));
const auth = () => passport.authenticate("jwt", {session: false, failWithError: true})
app.use(passport.initialize())
app.set('view engine', 'pug');
index. js
var express = require('express')
var router = express.Router()
router.get('/login', function(req, res){
res.render('index')
})
module.exports = router;
И вот где я заблудился: как я могу отрендерить свои представления и сделать уверен, что пользователь, который видит просмотры, является пользователем, который вошел в систему?
Я знаю, это звучит немного запутанно ...
Это, вероятно, вопрос новичков, ну да ладно ... . вот что я, просто пытаюсь учиться :)
Заранее спасибо!