我仍然很陌生,还有很多我不理解的事情。
我通过实现CSRUF创建了一个后端系统。但在CSURF中需要Cookie会话和Express会话。 https://github.com/expressjs/csurf
对此我感到困惑
因为我在前端使用React APP,这意味着我的网站是SPA(单页应用程序),并且我需要Cookie在我的客户端中发送它。到目前为止,我的网站运行正常。
但是我遇到了一个问题,我需要从服务器到客户端的cookie。我不知道如何使用这2个cookie-session
和express-session
获取cookie。
如何在我的客户端使用cookie?以及这些2:cookie会话和express会话有什么用途?
当我使用console.log(req.session)
检查时,我得到了:
Session {
csrfSecret: '36T2Hdv04-SplknGp2IcIOfU',
passport: { user: '117427002338010505238' },
_csrf: 'AklVuGUs-pCvbQ-C6Q2LjWze5fLqkADw7gLw'
}
我到目前为止所做的事情:
我使用res.cookie('c_token', req.csrfToken());
为我的客户发送csrf_token,应该从会话_csrf
中获取。 如果我错了,请纠正我。
看到这个之后:https://stackoverflow.com/a/46861437/10583820
我应该能够通过以下Cookie检索数据:hammer
和hammer.sig
Server.js
import express from 'express';
import bodyParser from 'body-parser';
import passport from 'passport';
import connection from './config/conn';
import { CategoryRoutes,ProductRoutes,CartRoutes,AuthRoutes} from './modules';
import session from 'express-session';
import csrf from 'csurf'
import cors from 'cors'
import cookieParser from 'cookie-parser'
import cookieSession from 'cookie-session'
import passportSetup from './config/passport-setup';
import keys from './config/keys';
const app = express();
// app.use(cookieParser());
app.use(cookieSession({
name: 'hammer',
keys: [keys.session.cookieKey],
maxAge: 24 * 60 * 60 * 1000 // 24 hours
}))
app.use(session({
secret: 'iCtkGVe0-4FKIGgBopL2QUM9K-jIK9miZhQE',
resave: false,
saveUninitialized: true,
cookie: {
secure: true,
httpOnly: true,
maxAge: 24 * 60 * 60 * 1000, // satu hari,
sameSite:true
}
}));
app.use(passport.initialize());
app.use(passport.session());
app.use(csrf({ cookie: false }));
app.use((req,res,next)=>{
res.header('X-XSS-Protection', '1; mode=block');
res.header('X-Frame-Options','deny');
res.header('X-Content-Type-Options','nosniff');
res.removeHeader("X-Powered-By");
res.cookie('c_token', req.csrfToken());
req.session._csrf = req.csrfToken();
console.log(req.session);
next();
})
app.use(cors({ origin:'http://localhost:3000/',credentials:true}))
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());
app.use('/api/', [CategoryRoutes, ProductRoutes, CartRoutes, AuthRoutes]);
const port = process.env.PORT || 5000;
app.listen(port, (err) => {
if(err){
console.log(err);
}else{
console.log(`Server running on port ! ${port}`);
}
});
请给我帮助,或者给我很好的参考资料以解决此问题。我已经为此工作了好几天:(