Как подключиться и аутентифицироваться на моем интерфейсе / стороне клиента с помощью MySQL - PullRequest
0 голосов
/ 19 июня 2020

Я пытаюсь подключить свое серверное приложение к клиентской стороне, но не могу понять, как это сделать. Я использую 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

    • routes (папка с моими запросами, например: «ax ios .get ('http://localhost: 3000 / users ') )
    • просмотров (папка с моими файлами .pug)

И в моей папке 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;

И вот где я заблудился: как я могу отрендерить свои представления и сделать уверен, что пользователь, который видит просмотры, является пользователем, который вошел в систему?

Я знаю, это звучит немного запутанно ...

Это, вероятно, вопрос новичков, ну да ладно ... . вот что я, просто пытаюсь учиться :)

Заранее спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...