Я использую reactjs для создания веб-магазина покупок и использую express js для создания бэкенда, когда я авторизую логин пользователя, я не могу установить cook ie для внешнего интерфейса
контроллер / пользователь / логин от expressjs
// user.controller
bcrypt.compare(req.body.password, user[0].password, (err, result) => {
if (err) {
console.log(err);
return res.status(401).json({ message: "password problem" });
}
if (result) {
const userId = JSON.stringify(user[0]._id);
res.cookie('userId', userId, { httpOnly: true, secure: true });
return res.status(200)
.json({
message: userId
})
}
return res.status(401).json({ message: "Auth failed" });
})
приложение. js от express
const express = require('express');
const app = express();
const morgan = require('morgan');
const bodyPaser = require('body-parser');
const mongoose = require('mongoose');
const cookiePareser = require('cookie-parser');
const cors = require('cors');
const productRouter = require('./api/routes/products');
const orderRouter = require('./api/routes/orders');
const userRouter = require('./api/routes/user');
mongoose.connect("mongodb+srv://conor_9tails:Mongoatlas123@cluster0-xcpy1.mongodb.net/test?retryWrites=true&w=majority",
{
useUnifiedTopology: true
}
);
mongoose.Promise = global.Promise;
mongoose.connection.on('connected', () => {
console.log("connected to mongo atlas");
});
app.use(morgan('dev'));
app.use(cookiePareser());
// app.use('/uploads', express.static('uploads'));
app.use(bodyPaser.urlencoded({ extended: false }));
app.use(bodyPaser.json());
app.use(cors({ origin: "*" }));
app.use('/products', productRouter);
app.use('/orders', orderRouter);
app.use('/user', userRouter);
app.use((req, res, next) => {
const error = new Error('Not found');
error.status = 404;
next(error);
});
app.use((error, req, res, next) => {
res.status(error.status || 500);
res.json({
error: {
message: error.message
}
});
});
module.exports = app;
затем я делаю промежуточное ПО, называемое auth, обычно просто распечатываю повара ie userId
check-auth. js из middleware / checkauth от expressjs
module.exports.requireAuth = (req, res, next) => {
console.log("THIS IS cookies", req.cookies);
next();
};
из внешнего интерфейса, я создаю компонент входа в систему из reactjs
handleSubmit(event) {
let { email, password } = this.state;
fetch("http://localhost:5000/user/login", {
method: "POST",
body: JSON.stringify({
email, password
}),
headers: {
"content-type": "application/json; charset=UTF-8"
}
})
.then(response => {
return response.json();
})
.then((json) => {
console.log(json);
})
.catch((error) => {
console.log(error);
})
event.preventDefault();
}
, как вы можете видеть в моей консоли .log response. json (), которые содержат сообщение userId, и оно успешно введите описание изображения здесь
, но в приложении Chrome не было сохранено поваренное имя ie
Спасибо, что уделили мне время на решение этой сложной проблемы