Node 代理多个 vue的前端dist项目,使用cursf进行全部路由防护时,为什么会出现路径不一样是报错,无效的csrftoken,请代码正确示例,配置,cursf,cors,session等,
时间: 2024-09-13 12:13:13 浏览: 35
vue微商城项目源码-vue-shop(适用于Node.js 10.x).zip
在Node.js中代理多个Vue前端项目的dist目录,并使用`cors`和`csurf`进行跨源请求防护及CSRF令牌验证时,可能会遇到因为不同的路由导致CSRF令牌验证失败的问题。这通常是因为`csurf`中间件默认会在每个请求上查找名为`csrfToken`的cookie,如果请求是从另一个源发起的,并且没有正确的cookie设置,就会导致验证失败。
为了解决这个问题,你可以在`csurf`中间件中设置`cookie`选项,以确保cookie能够跨域设置。同时,确保`cors`中间件允许跨域的请求,并且设置`credentials`为`true`以允许cookie在跨域请求中携带。
以下是一个简单的示例代码,展示如何配置`csurf`和`cors`中间件,以及如何在session中处理CSRF令牌:
```javascript
const express = require('express');
const cors = require('cors');
const csrf = require('csurf');
const cookieSession = require('cookie-session');
const app = express();
const csrfProtection = csrf({ cookie: true });
// 设置session中间件,注意session的secret
app.use(cookieSession({
name: 'session',
keys: ['key1', 'key2'], // 多个用于更安全的加密
maxAge: 24 * 60 * 60 * 1000 // 过期时间
}));
// 允许跨域请求,并携带凭证(如cookie)
const corsOptions = {
origin: 'http://example.com', // 你的Vue项目的地址
credentials: true,
allowedHeaders: ['Content-Type', 'Authorization', 'X-Requested-With', 'device-uuid', 'Access-Control-Allow-Origin'],
methods: 'GET,HEAD,PUT,PATCH,POST,DELETE',
preflightContinue: false,
optionsSuccessStatus: 204
};
app.use(cors(corsOptions));
// 在路由处理之前应用csurf保护中间件
app.use(csrfProtection);
// 路由示例
app.get('/some-route', (req, res) => {
// 如果请求通过了csurf验证,req.csrfToken()将可用
res.cookie('XSRF-TOKEN', req.csrfToken());
res.send('Welcome to some route!');
});
// Vue项目代理配置(使用http-proxy-middleware)
const { createProxyMiddleware } = require('http-proxy-middleware');
app.use('/api', createProxyMiddleware({
target: 'http://localhost:8080', // 你的Vue项目的API服务器地址
changeOrigin: true,
}));
app.listen(3000, () => {
console.log('Server is running on port 3000');
});
```
请根据你的实际项目情况调整上述代码中的配置。
阅读全文