Cookie会话和Express会话如何与CSRUF一起使用?

时间:2019-01-12 07:04:46

标签: node.js express session cookies

我仍然很陌生,还有很多我不理解的事情。

我通过实现CSRUF创建了一个后端系统。但在CSURF中需要Cookie会话和Express会话。 https://github.com/expressjs/csurf

对此我感到困惑

因为我在前端使用React APP,这意味着我的网站是SPA(单页应用程序),并且我需要Cookie在我的客户端中发送它。到目前为止,我的网站运行正常。

但是我遇到了一个问题,我需要从服务器到客户端的cookie。我不知道如何使用这2个cookie-sessionexpress-session获取cookie。

  

如何在我的客户端使用cookie?以及这些2:cookie会话和express会话有什么用途?

当我使用console.log(req.session)检查时,我得到了:

Session {
 csrfSecret: '36T2Hdv04-SplknGp2IcIOfU',
 passport: { user: '117427002338010505238' },
 _csrf: 'AklVuGUs-pCvbQ-C6Q2LjWze5fLqkADw7gLw' 
}

Cookie Storage

我到目前为止所做的事情:

我使用res.cookie('c_token', req.csrfToken());为我的客户发送csrf_token,应该从会话_csrf中获取。 如果我错了,请纠正我

看到这个之后:https://stackoverflow.com/a/46861437/10583820

我应该能够通过以下Cookie检索数据:hammerhammer.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}`);
    }

});

请给我帮助,或者给我很好的参考资料以解决此问题。我已经为此工作了好几天:(

0 个答案:

没有答案