неверный токен csrf на сервере aws, но отлично работает на localhost - PullRequest
0 голосов
/ 16 июня 2019

Я получаю ForbiddenError: invalid csrf token на сервере AWS, но он отлично работает на локальном хосте.Я пробовал другие решения на stackoverflow, но, похоже, не работает.Я прилагаю файл сервера и файл маршрутизатора.пожалуйста, проверьте код

SERVER.js

const express = require('express');
const mongoose = require('mongoose');
const passport = require('passport');
const cookieparser = require('cookie-parser');
const bodyParser = require('body-parser');
const session = require('express-session');

/******************************************
 * RUNNING EXPRESS MIDDLEWARE
 *****************************************/
const app = express();

/******************************************
 * BODY PARSER INITILIZATION
 *****************************************/
app.use( bodyParser.urlencoded( { extended : false } ) );
app.use( bodyParser.json() );
/******************************************
 * COOKIE PARSER INITILIZATION
 *****************************************/
app.use( cookieparser());
app.use( session({ secret : 'mysuperAdminDavis@HasCookire', resave : false, saveUninitialized :false }));
/******************************************
 * DATABASE INITILIZATION
 *****************************************/
const db = require('./config/keys').mongoURI;
mongoose.connect( db , { useNewUrlParser: true, useFindAndModify : false, useCreateIndex : true })
    .then(() => console.log('Database Connected Successfully!!!!'))
    .catch((err) => console.log('Error while connecting to Database' + err ));

/******************************************
 * PASSPORT INITILIZATION
 *****************************************/
app.use( passport.initialize() );
require('./config/passport');

/******************************************
 * CORS CONFIGURATION
 *  app.use(( req,res,next ) => {
   res.header("Access-Control-Allow-Origin","*");
   res.header("Access-Control-Allow-Headers",
   "*");
   res.header("Access-Control-Allow-Credentials", "*")
   if( req.method === "OPTIONS" ){
     res.header('Access-Control-Allow-Methods','PUT, POST, PATCH, DELETE, GET ');
     return res.status(200).json({});
   }
   next();
 })

 *  CROSS-SITE ORIGIN - ALLOW
 *  *****************************************/
app.use( ( req, res, next ) => {
    res.header("Access-Control-Allow-Origin","*");
    res.header("Access-Control-Allow-Headers","*");
    next();
});


/******************************************
 * ROUTER
 *****************************************/
var userRoutes = require('./server/Routes/userRoutes');
app.use('/user', userRoutes );



/******************************************
 * START EXPRESS SERVER AT PORT 5001
 *****************************************/
const PORT = process.env.PORT || 5001;
app.listen( PORT, () => console.log(`Content CMS started on ${PORT}`) );

userRouter.js

var express = require('express');
var router = express.Router();
var csrf = require('csurf');
var csrfProtection = csrf({ cookie :true });
router.use( csrfProtection );

/***********************************
 * CSRF TOKEN FOR USER ROUTES
 * @DESC - GET CSRFTOKEN FOR PROTECTION
 * @ACCESS - PUBLIC
 ***********************************/
router.get('/getCsrfToken', csrfProtection, ( req ,res ,next ) => {
    return res.json( req.csrfToken() );
})




router.post('/login', ( req,res, next ) => {
    return res.send('Hello send');
})

router.get('/login', ( req, res, next ) => {
    res.send('Hello');
})

module.exports = router;

Я вызываю API для /user/getCsrfToken, который является API-интерфейсом get, затем он отправляет обратно csrf ....

Но при вызове с /user/login с полезной нагрузкой { _csrf : "<csrfToken>", email : "sasd@gmail.com", password : "asdasd" }

, но всегда возвращается «Запрещено: неверный токен csrf»

...