У меня есть ReactJs во внешнем интерфейсе и бэкэнд-узле. На каждом вызове API вactjs с использованием axios в backend генерируется новый идентификатор сеанса. Когда я вызываю API-интерфейсы, использующие сеанс Postman, поддерживается в каждом вызове API, а connect.sid хранится в Postman.cookie и в каждом вызове API connect.sid передается в заголовках.Я пытаюсь получить connect.sid в реагировать на вызов API, используя Axios.
app.js (узел)
var passport = require('passport');
var session = require('express-session');
var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
var app = express();
app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(session({
secret: 'intelligenseintelligensein', // session secret
resave: false,
saveUninitialized: false,
cookie: {
httpOnly: false,
secure: false,
maxAge: 2000000
}
}));
passport.js
var passport = require('passport');
var LocalStrategy = require('passport-local');
var user_controller = require('./user_controller');
var functions = require('../functions');
passport.serializeUser(function(user, done) {
done(null, user);
});
passport.deserializeUser(function(obj, done) {
done(null, obj);
});
// =========================================================================
passport.use('local-login', new LocalStrategy({
// by default, local strategy uses username and password, we will override with email
usernameField : 'email',
passwordField : 'password',
passReqToCallback : true // allows us to pass in the req from our route (lets us check if a user is logged in or not)
},
function(req,email, password, done) {
user_controller.loginUser(req,email,password).then(function (user) {
if(user) {
done(null, user);
} else {
done(null, user);
}
}).fail(function (err){
done(null, false);
});
}
));
exports.authenticateUser = function (req, res, next) {
passport.authenticate('local-login', function(err, user,info) {
if(err) {
return functions.sendErrorResponse(req, res, 400, 'failed to login');
}
if(user){
req.user = user;
req.session.user = user;
next();
}
else{
return functions.sendErrorResponse(req, res, 400, 'Cannot login please try again');
}
})(req, res , next);
}
логин.jsx (реакцияJS)
componentDidMount(){
let apiBaseUrl = process.env.REACT_APP_API_PROTOCOL+'://'+process.env.REACT_APP_API_HOST+':'+process.env.REACT_APP_API_PORT;
axios.get(apiBaseUrl, {
credentials : 'include'
})
.then(response => {
if (response.status == 200) {
console.log(response.data);
}
else
{
this.errorAlert('Something went wrong');
}
})
.catch(error => {
if(error){
if(error.response != null){
let error_message = error.response.data.message
this.setState({
error_list : error_message
})
}else{
let error_message = error.message
this.setState({
error_list : error_message
})
}
}else{
let error_message = 'network error !!!'
this.setState({
error_list : error_message
})
console.log("leads error_list",this.state.error_list);
}
})
}