【发布时间】:2018-09-09 15:03:30
【问题描述】:
我正在尝试将我的 SailsJS API 与另一个节点应用程序一起使用,并不断收到 403 Forbidden 响应类型。
我的操作是scale/create-weight,它使用发布的数据创建数据库记录。
我将操作添加到config/policies.js 以允许未登录用户访问:
//config/policies.js
module.exports.policies = {
'*': 'is-logged-in',
// Bypass the `is-logged-in` policy for:
'entrance/*': true,
'account/logout': true,
'view-homepage-or-redirect': true,
'deliver-contact-form-message': true,
'scale/create-weight': true
};
这是我尝试从同一台计算机上的单独节点应用程序访问 API 的方式:
const querystring = require('querystring')
const http = require('http')
const postData = querystring.stringify({
'weight' : '10',
'units' : 'ounces',
'userId' : '5b8c16301cee97343513e184'
});
var options = {
host: "localhost",
port: 1337,
path: "/api/v1/scale/create-weight",
method: "POST",
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
'Content-Length': Buffer.byteLength(postData)
}
};
const req = http.request(options, (res) => {
console.log(`STATUS: ${res.statusCode}`);
console.log(`HEADERS: ${JSON.stringify(res.headers)}`);
res.setEncoding('utf8');
res.on('data', (chunk) => {
console.log(`BODY: ${chunk}`);
});
res.on('end', () => {
console.log('No more data in response.');
});
});
req.on('error', (e) => {
console.error(`problem with request: ${e.message}`);
});
// write data to request body
req.write(postData);
req.end();
有服务器响应:
STATUS: 403
HEADERS: {"x-powered-by":"Sails <sailsjs.com>","content-type":"text/plain; charset=utf-8","content-length":"9","etag":"W/\"9-PatfYBLj4Um1qTm5zrukoLhNyPU\"",
"set-cookie":["sails.sid=s%3AonM7KWW6ohNoOPNiNjXy9NRFapolNavV.eZHy2P1o4WN1BvDbIWAZEsafG9RzaN1D6O%2FgaEjoLq0; Path=/; HttpOnly"],"date":"Sun, 09 Sep 2018 14:
55:58 GMT","connection":"close"}
BODY: Forbidde
BODY: n
No more data in response.
我必须做什么才能允许外部应用使用 API?
【问题讨论】:
-
更改顺序。将星号放在底部。 Sails 使用 express,因此如果它按顺序注册这些中间件,则首先应用星号。
-
这不是风帆的问题,我上面有的是默认策略文件加上我为我的操作添加的行。
标签: javascript node.js sails.js