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