我使用 nodejs 创建了 Api 服务器,使用 reactjs 创建了客户端, 客户端跑在url:5000,客户端跑到url:3000,分别运行。 客户端向服务器端发送请求并返回给它。 我在服务器中创建了一个会话,当我使用登录功能连接时,我使用 jwt 返回一些令牌,并将令牌返回给客户端,但是客户端浏览器中的问题我没有 session.id
这是我的代码 appjs
const express = require('express');
const app = express();
const session = require('express-session');
const cors = require('cors');
const cookieParser = require('cookie-parser')
const resource = require('./resources/en-US');
const dotenv = require('dotenv');
dotenv.config();
var corsOptions = {
origin: 'http://localhost:3000',
credentials: true,
optionsSuccessStatus: 200 // For legacy browser support
}
const authRouter = require('./routes/auth-router');
const adminRouter = require('./routes/admin-router');
app.use(cors(corsOptions));
app.use(express.json());
// app.use(cookieParser());
const http = require('http').createServer(app);
const mongoose = require('mongoose');
const MongoStore = require('connect-mongodb-session')(session);
const store = new MongoStore({
uri : process.env.MONGODB_URL,
collection:'session',
});
app.use(session({
secret: process.env.SESSION_SECRET_KEY,
resave: true,
saveUninitialized: true,
store: store,
cookie: { secure: true,httpOnly:true }
}))
app.use('/api', authRouter);
app.use('/api', adminRouter);
mongoose
.connect(process.env.MONGODB_URL,{
useNewUrlParser:true,
useCreateIndex:true,
useUnifiedTopology:true
})
.then(() => console.log('connected'))
.catch(err => console.log(err))
http.listen(process.env.PORT, () => {
console.log(`listening on port ${process.env.PORT}`);
});
当我转到 Api 服务器中的其他路由并尝试打印 req.session 时,我没有看到我的会话与存储数据。
请问我需要帮助, 有什么问题?
答案 0 :(得分:0)
这是一个客户端请求:
export const authenticationLogin = async (data) => {
const {email , password} = data;
console.log("log in controller")
try{
return new Promise( (resolve,reject) => {
axios(
{
url:"/login",
method : "POST",
data: {
email : email,
password: password
},
withCredentials: true
}
).then( async (data) => {
console.log("after responce feching")
axios.defaults.headers.common['x-auth-token'] = data.data.token;
console.log(data);
debugger;
resolve(data.data);
}).catch(error => {
reject(error)
})
})
}catch(error){
console.error(error);
}
}
答案 1 :(得分:0)
这不行 添加了带有响应头的新图像,我看到了 setCookies,但我在 cookie(应用程序选项卡)中看不到它