如何将XSRF标头添加到羽毛客户端的REST请求中



我已经为羽毛co配置了服务器/节点,而羽毛的范围内则是羽毛的一侧。我的配置看起来如下。

const app = express(feathers());
app.use(cookieParser());
app.use(csrf({cookie: true}));
app.use(express.urlencoded({extended: true}));
app.use(express.json({strict: false, limit: '1mb'}));
app.configure(express.rest());
app.configure(primus({transformer: 'uws'}, primus => {
    // primus.library();
    // primus.save(__dirname + '/feathers-primus-client.js');
    primus.authorize(function (req, done) {
    const userToken = socketUtility.getTokenFromHandshake(req);
    if (csrf.verifyCSRFToken(req)) { // csrfToken === req.query.csrf;
        done();
    } else {
        done({statusCode: 403, message: 'handshake unauthorized'});
    }
});
// Set up our services (see `services/index.js`)
app.configure(services);
app.hooks(appHooks);

这是我的客户端代码的一部分:

this.restFeathersClient = feathers();
this.socketFeathersClient = feathers();
this.serverAddress = `${window.location.origin}:${window.location.port}`;
const rest = feathers.rest(this.serverAddress);
this.restFeathersClient.configure(rest.fetch(window.fetch));
const socket = new Primus(this.serverAddress);
this.socketFeathersClient.configure(feathers.primus(socket));

现有应用程序正在使用CSRF软件包。从客户那里,我需要:

  1. 设置'x-xsrf-cookie'请求标题在REST呼叫上。
  2. 添加request.query.csrf。

对于Primus,我们当前的实施聆听了"外向:: url"。

我感谢任何帮助,因为我不确定如何与羽毛客户一起做。

,因此我能够找到一个用于休息呼叫的解决方案。我打算使用获取,因此我的解决方案只能用于获取。我使用了" Fetch-Intercept"软件包,并注册了一个拦截器来添加标头。如果您在AngularJS中,那么您可能可以使用$ http,并且会添加标头。对于其他休息选项,您可能必须找到类似的解决方案。

这是代码段:

import * as fetchIntercept from 'fetch-intercept';
fetchIntercept.register({
    request(url, config) {
        if (config.method !== 'GET') {
            const XSRF_TOKEN = 'XSRF-TOKEN';
            const csrfToken = document.cookie.match(new RegExp('(^| )' + XSRF_TOKEN + '=([^;]+)'));
            if (csrfToken) {
                config.headers[`X-${XSRF_TOKEN}`] = csrfToken[2];
            }
        }
        return [url, config];
    }
});

这是用于Primus的解决方案:

const csrfToken = 'get your token';
const socket = new Primus(`${this.serverAddress}?csrf=${csrfToken}`);
feathersClient.configure(feathers.primus(socket));

相关内容

  • 没有找到相关文章

最新更新