@JaaJ
beginer developer

При запросе с React приложения на сервер не происходит passport.session() и последующей передачи user в req.user. Что я делаю не так?

Я пишу небольшое чат приложение с фронтом и бэком. Когда я тестировал бэкенд через Postman у меня все прекрасно работало. Но когда же пробовал послать запрос внутри компонента React, десерелизация на сервере не произошла.

//Код app Приложения
const express = require("express");
const app = express();
const passport = require("passport");
const cors = require("cors")
const Router = require("./route/route")
const session = require("express-session");
const FileStor = require("session-file-store")(session);


app.use(cors());
app.use(express.json());
app.use(express.urlencoded());
app.use(session(
    {
    secret:"Zal",
    store:new FileStor,
        cookie:{
        path:"/",
        httpOnly:true,
        maxAge:60*60*1000*24
    },
    resave:false,
    saveUninitialized:false
    }
))

require("./passport/passport");
app.use(passport.initialize());
app.use(passport.session());
app.use(Router)


module.exports = app

//Код passport.js
const passport = require("passport");
const LocalStrategy = require("passport-local").Strategy;
const user = require("../model/user")


passport.serializeUser(function(user, done) { 
    console.log("Серелизация");        
    user.id = 0   
    done(null, user.login);
  });
  
passport.deserializeUser(function(login, done) {  
    console.log("Десерелизация",login);      
    user.get(login,(err,res)=>{
        if(err)throw err;        
        done(null,res)
    });

});

passport.use(new LocalStrategy({usernameField: 'login',passwordField: 'password'},
    function(login, password, done) {
      let obj = {
        login,password
      }
      console.log(login,password);
      user.getUser(obj,(err,result)=>{        
          if(err)return done(err);
          if(!result[0])return done(null,false); 
          return done(null,result[0])
      })
    }
  ));

  module.exports = passport


//Сам компонент React
function Chat({saveMassages}){
    useEffect(()=>{
        fetch("http://localhost:9000/getAllMassage")
        .then(responce=>responce.json())
        .then(arr=>{
            
            saveMassages(arr)
        })
    })
    return(
        <div className="chat">
            <Header></Header>
            <ChatsBar></ChatsBar>
        </div>
    )
}

const mapDispatchToProps={
    saveMassages
}
export default connect(null,mapDispatchToProps)(Chat)


Также пробовал установить proxy в package.json на клиенте
{
  "proxy":"http://localhost:9000",
  "name": "front",
  "version": "0.1.0",
  "private": true,
  "dependencies": {
    "@testing-library/jest-dom": "^4.2.4",
    "@testing-library/react": "^9.5.0",
    "@testing-library/user-event": "^7.2.1",
    "react": "^16.13.1",
    "react-dom": "^16.13.1",
    "react-redux": "^7.2.1",
    "react-router-dom": "^5.2.0",
    "react-scripts": "3.4.2",
    "redux": "^4.0.5"
  },
  • Вопрос задан
  • 111 просмотров
Пригласить эксперта
Ответы на вопрос 1
@JaaJ Автор вопроса
beginer developer
Нашел в чем проблема. Обычный fetch не передает cockie и поэтому пришлось. добавить после роута {
method: 'GET',
credentials: 'include'
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы