javascript - 允许任何具有 sails 策略的人访问 API

标签 javascript node.js sails.js

我正在尝试将我的 SailsJS API 与另一个 Node 应用程序一起使用,并不断收到 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

};

下面是我尝试从同一台计算机上的单独 Node 应用程序访问 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?

最佳答案

这个问题是由于 csrf 安全政策造成的。虽然完全关闭该设置并不好,但您可以在 config/routes.js 文件中以每个路由为基础对其进行管理。

我更新了路线,它起作用了:

'POST /api/v1/scale/create-weight': {
  action: 'scale/create-weight',
  csrf: false
},

我最终会实现 API key /API secret 安全策略,以便使用 API 的第 3 方可以通过这种方式进行身份验证。

关于javascript - 允许任何具有 sails 策略的人访问 API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52245746/

相关文章:

javascript - 像 toDataURL() 这样的函数

javascript - Fetch 和 Axios 的区别

javascript - 如何创造新的 promise ?

javascript - 打开新窗口并在该新窗口上运行 javascript

node.js - 如何将查询字符串传递给中间件函数?

node.js - Sailsjs Model.update 在 Controller 中不起作用

node.js - 将 ejs-partial 包含到脚本标记中 (sails.js)

javascript - Ionic(单击)在 AlertController 消息属性中不起作用

javascript - 基于浏览器窗口大小的条件 javascript 执行?

javascript - asp.net 中两个不同属性的 Textbox1.Attribute.Add()