Expressjs не может установить cook ie в интерфейсе reactjs после авторизации bcrypt - PullRequest
0 голосов
/ 22 марта 2020

Я использую 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

Спасибо, что уделили мне время на решение этой сложной проблемы

...