Сеанс сохраняется только после запуска npm build и перемещения содержимого папки «build» в папку «public» на файлах сервера - PullRequest
0 голосов
/ 08 апреля 2019

Я строю проект в реагировать и узел, он включает в себя наличие постоянного сеанса после входа в систему. Он прекрасно работает после выполнения команды «npm run build» на клиенте реагирования и перемещения содержимого папки «build» в папку «public» на файлах сервера.

Есть ли способ заставить его работать при отдельном запуске клиента? Я думаю, что это может иметь какое-то отношение к CORS

На моей стороне сервера я использую пакет «npm i cors», как показано ниже в прилагаемом коде. Кроме этого, я не знаю, что делать.

релевантные части app.js

var cors= require('cors');
var session = require('express-session');
app.use(session({
    secret: 'vacations',
    resave: false,
    saveUninitialized: true,
    cookie: { secure: false }
}));
app.use(cors());

конечная точка входа в систему

router.post("/login", async (req, res) => {
  console.log(req.body);
  let response = {};
  let adjustmentArray = [];

  if(req.body.login == "admin" && req.body.password == "admin"){
    console.log("Detected administrator login")
    Member.findAll({
      where:{
        username: req.body.login,
        password: req.body.password
      }
    })
    .then(admin =>{
      req.session.isLogged = 1;
      req.session.firstname = admin[0].dataValues.firstname;
      req.session.userid = admin[0].dataValues.id;
      req.session.isAdmin = 1;

      response.userid = admin[0].dataValues.id;
      response.firstname = admin[0].dataValues.firstname;
      response.isAdmin = 1;

      adjustmentArray.push(response);

      res.json(adjustmentArray);
    })
    .catch(err=>{
      console.log(err);
      console.log("err");
      res.json([]);
    })




  }

код клиента

  async sendLogin() {
    let loginObj = {
      login: this.props.usernamelogin,
      password: this.props.passwordlogin
    };

    let response = await fetch("http://localhost:3000/members/login", {
      method: "POST",
      headers: {
        Accept: "application/json",
        "Content-Type": "application/json"
      },
      body: JSON.stringify(loginObj)
    });

    let user = await response.json();

    console.log(user);

    if (user.length !== 0) {

      if(user[0].isAdmin){

        this.props.dispatchAdminLogin(user[0]);
        alert("Hey boss")
        this.setState({ loginmsg: "" });
        this.props.history.push("/admin")
      }
      else{
        this.props.dispatchLogin(user[0]);
        alert("Logged in! Redirecting...");
        this.setState({ loginmsg: "" });
        this.props.history.push("/");
      }
    } else {
      this.setState({
        loginmsg: "Please check username/password and try again"
      });
    }
  }

  async componentDidMount() {
    let response = await fetch("http://localhost:3000/checksession");
    let user = await response.json();

    console.log(user);
    if (user.isLogged) {
      this.props.dispatchLogin(user);
    }
  }

router.get("/checksession", async (req, res) => {

  if (req.session.isLogged) {


    Member.findAll({
      where: {
        id: req.session.userid,
        username: req.session.firstname
      }
    })
      .then(member => {

        if (member.length != 0) {


            let response = {};


            response.isLogged = 1;
            response.firstname = member[0].dataValues.firstname
            response.userid = member[0].dataValues.id


            res.json(response)
        } 

        else {
          //i think this code will never happen
            console.log("didnt find member, killed session")
          req.session.destroy();

          res.json({isLogged:0});
        }
      })
      .catch(err => {
        //also pretty likely this never happens
        console.log(err);
        console.log("couldnt find member?");
        res.json({isLogged:0});
      });
  }
  else{
      console.log("i didnt pass session check")
      res.json({isLogged:0})
  }

});

Я хочу, чтобы сеанс сохранялся при запуске клиента и сервера на отдельных портах в отдельных экземплярах Visual Studio.

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