Как сеанс cookie и экспресс сеанс работают с CSRUF? - PullRequest
0 голосов
/ 12 января 2019

Я все еще новичок в выражении, и есть еще много вещей, которые я не понимаю.

Я создал бэкэнд-систему, внедрив CSRUF. но в CSURF требуется сеанс cookie и экспресс-сеанс. https://github.com/expressjs/csurf

И меня это смущает

потому что я использую реагирующее приложение в моем веб-интерфейсе, что означает, что мой веб-сайт - SPA (одностраничное приложение), и мне нужно, чтобы файл cookie отправил его моему клиенту. пока мой сайт работает нормально.

но у меня возникла проблема: мне нужен файл cookie с моего сервера на клиентскую сторону. Я не знаю, как получить файл cookie, используя эти 2 cookie-session и express-session.

Как использовать куки для моей клиентской стороны? и как они используются: cookie-сессия и экспресс-сессия?

когда я проверяю, используя 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: 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}`);
    }

});

Пожалуйста, дайте мне помощь, или дайте мне хорошую справку, чтобы справиться с этим. Я работал над этим в течение нескольких дней: (* ​​1054 *

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...