我已经为羽毛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软件包。从客户那里,我需要:
- 设置'x-xsrf-cookie'请求标题在REST呼叫上。 添加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));