我正在學習 Express.js,試圖創建一個 api 并將其連接到 React 前端。在 express 中,我使用 express-session 創建會話。對于身份驗證,我使用 passport.js。這是我的 app.js 檔案的一部分:
const session = require('express-session');
const mongoDbStore = require('connect-mongodb-session')(session);
const store = new mongoDbStore({
uri: 'mongodb://localhost:27017/DB_NAME',
collection: 'UserSessions'
});
const app = express();
app.use(cors())
app.use(express.urlencoded({ extended: true }));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
const sessionConfig = {
secret: process.env.SESSION_SECRET,
resave: false,
saveUninitialized: true,
store,
cookie: {
expires: Date.now() 1000 * 60 * 60 * 24 * 7,
maxAge: 1000 * 60 * 60 * 24 * 7,
httpOnly: true
}
}
app.use(session(sessionConfig));
app.use(passport.initialize());
app.use(passport.session());
passport.use(new LocalStrategy(User.authenticate()));
passport.serializeUser(User.serializeUser());
passport.deserializeUser(User.deserializeUser())
app.listen(8080, () => {
console.log('listening on port 8080')
});
我的問題是,當我從 React 應用程式向后端發送請求時,我沒有收到會話 ID 作為 cookie。在我的前端,我使用 axios 來發送請求:
import axios from 'axios';
export default axios.create({
baseURL: "http://localhost:8080/",
headers: {
'Content-Type': 'application/json',
'Accept': 'application/json'
}
});
為什么我的前端沒有收到來自后端的 cookie,我該如何解決這個問題?謝謝!
uj5u.com熱心網友回復:
因為您的 cookie 是 httpOnly cookie,所以為了發送 cookie,您可以通過 fetch 方法進行:
const req = await fetch(URL,{
method : "POST",
credentials : "include", // to send HTTP only cookies
headers: {
"Contetnt-Type" : "application/json"
},
body : JSON.stringigy({name : "Bob"})
}):
const result = await req.json();
通過 axios,您還可以添加 withCredential 屬性:
axios.get(BASE_URL '/todos', { withCredentials: true });
并且在后端考慮這個引數:
const corsOptions = {
optionsSuccessStatus: 200,
credentials: true,
}
app.use(cors(corsOptions))
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/447225.html
上一篇:當我在“工具”選項卡中編輯我的R片段時,為什么它們在控制臺中不可用?
下一篇:PHP會話發送標頭“Cache-Control:no-store,no-cache,must-revalidate”。如何更改為“Cache-Control:s-maxage=10,public,ma
