Почему я не могу отправить куки более express, чтобы отреагировать? - PullRequest
0 голосов
/ 25 февраля 2020

Я работаю над аутентификацией для моего сайта. Я впервые пытаюсь использовать куки. Я считаю, что с моим кодом что-то в корне не так, и после 3 дней поиска ответов я думаю, что это как-то связано с прокси в пакете. json file.

package. json -

"proxy": "http://localhost:8080",
"scripts": {
"build": "webpack --mode production",
"start": "npm run build && node src/server/index.js",
"client": "webpack-dev-server --mode development --devtool inline-source-map --hot",
"server": "nodemon src/server/index.js",
"dev": "concurrently \"npm run server\" \"npm run client\""
},

Индекс сервера. js -

const env      = require('dotenv').config();
const express  = require('express');
const app      = express();
const cors     = require('cors');
const http     = require('http');
const bodyParser = require('body-parser');
const server     = http.createServer(app);
const io         = require('socket.io')(server);
const cookieParser = require('cookie-parser');
const DbServices   = require('./database/DbServices.js');
const DbInterface  = require('./adapters/DbInterface.js');

let port = 8080;
if(env.parsed.NODE_ENV !== 'production'){ port = env.parsed.PORT; }
else{ port = process.env.PORT }

let db = {host:"",user:"",password:"",database:""};
if(env.parsed.NODE_ENV !== 'production'){
  db = {host:env.parsed.HOST,user:env.parsed.USER,password:env.parsed.PW,database:env.parsed.DB};
}
else{
  db = {host:process.env.HOST,user:process.env.USER,password:process.env.PW,database:process.env.DB};
}

let dbServices = new DbServices(db);
let dbInterface = new DbInterface(dbServices);

app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
app.use(cookieParser());

io.on('connection', client => {

});

app.post('/user/auth', function(req, res, next) {
  dbInterface.pwCheck(req.body, (e) => {
    res.cookie('token', {token:e});
    res.send();
    next();
  });
});

app.post('/user/register', function(req, res) {
  dbInterface.registerUser(req.body, (e) => {

  });
});

app.get('/ping', function(req, res) {
  res.send('(◍•ᴗ•◍)❤ pong');
});

app.use(cors({ origin: 'http://localhost:3000', credentials: true }));

server.listen(port, () => {
  if(env.NODE_ENV !== 'production'){
    console.log(`Initialized server. Port: ${port}!`);
  }
});

Реакция компонента входа в систему -

submit(e){
e.preventDefault();

fetch("/user/auth", {
  method: "POST",
  credentials: 'include',
  redirect: 'follow',
  headers: {
    'Accept': 'application/json',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({tag:this.state.usernameInput, acc:this.state.passwordInput})})
.then(res => {
  console.log(res);
})
.catch(err => {
  alert('Error logging in please try again');
});
}

Мне известно о беспорядке db vars на моем сервере index. js file. Я планирую это исправить, но хотел включить все на тот случай, если это может быть причиной проблемы.

Поработав немного, я обнаружил это - если я изменю прокси в пакете на "http://localhost : 8080 / api"и поместите api в начало моих маршрутов в индексе. js, он возвращает статус 200 (отлично), но не готовит ie из / api / user / auth. Если «api» удален с прокси и в моих маршрутах, я получаю статус 404 (не в порядке). Не могу понять, почему. Все учебники, которые я видел, не включают "/ что-то" в прокси. Это заставляет меня думать, что с прокси что-то не так. Кроме того, я запутался в том, как это будет работать (что мне нужно будет изменить) в производстве. Я планирую разместить на Heroku и уже использую ClearDB через Heroku. React работает на порту 3000, и я пробовал в Chrome и Firefox, кстати.

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