Express сервер не устанавливает куки - PullRequest
1 голос
/ 10 апреля 2020

Я пытался выяснить, что не так с этим кодом для установки файлов cookie на сервере после авторизации входа от клиента. В настоящее время он выводит на консоль пустой объект, представляющий файлы cookie. После того как внутренний сервер проверил вход в систему, он устанавливает файлы cookie следующим образом:

// UserController.js (server-side)

    res.cookie('token', token )
       .cookie('username', username)
       .status(201)
       .send(username)

Затем возвращается к этой функции, которая перенаправляет его на новую страницу

/// Login.js (client-side)

  const login = async () => {
      var token = params.get("token")

      const config = {
        method: 'POST', 
        url: url + "/users/fbLogin", 
        headers: {
          "Content-Type": "application/json",
          "Access-Control-Allow-Origin": "http://localhost:3000"
        }, 
        data: {
          fb_id: fb_id, 
          token: token, 
        }
      }

      var res = await axios(config)
      if(res.status === 201) {
        window.location.assign(`${client_url}/home?user=${res.data}`);
      }
  } 

Когда страница перенаправленный, он отправляет запрос на получение обратно на сервер следующим образом:

// UserHome.js

function validateUser(username){

    // axios.defaults.withCredentials = true
    const config = {
        method: 'GET', 
        url: url + '/users/auth', 
        // withCredentials: 'true', 
        headers: {
            "Content-Type": "application/json",
            'Access-Control-Allow-Credentials': true,
            "Access-Control-Allow-Origin": "http://localhost:3000"
        }, 
        data: {
            username: username
        }, 
    }
    try {

        var res = axios(config)

    } catch(err) {
        console.log(err)
    }

}

этот запрос обрабатывается этой функцией:

// UsersController.js 

UsersController.auth = async function(req, res) {
    console.log(req.cookies)
}

, которая в настоящее время печатает это: [Object: null prototype ] {}

Кто-нибудь знает, что я явно делаю неправильно? Я также тестирую его в Chrome и Safari, и у меня возникают те же проблемы.

Настройка express:


const express = require('express');
const bodyParser = require('body-parser');
const app = express(); 
const cors = require('cors');
const api =  require('./api/index.js'); 
const passport = require('passport')
const cookieParser = require("cookie-parser");
var cookieSession = require('cookie-session')


// setup the connection
const port = process.env.PORT || 5000;
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
// use it before all route definitions
app.use(cors({origin: 'http://localhost:3000'}));

app.use(passport.initialize());
app.use(passport.session());

app.use(cookieSession({
    auth: 'session', 
    keys: 'secret', 
    maxAge: 900000,
    httpOnly: false, 
    sameSite: false, 
    overwrite: true
}))

app.use(cookieParser());
app.use('/', api); 

app.listen(port, () => console.log(`Listening on port ${port}`));


...