对用户使用 parse-server 并进行身份验证并调用其他内部 REST Web 服务

Using parse-server for users and auth and call other internal REST web service

我们计划在内部托管 parse-server 来为我们正在构建的新移动应用程序提供内容服务。

此外,我们还有一些内部 REST 服务,除了我们在解析中构建的内容外,我还希望我们的移动客户端使用这些服务。 我想利用解析服务器用户、身份验证和 session 管理来调用这些内部 REST 服务。

我发现云代码功能非常有限,因为它们只接受 POST,我想要更多 RESTful api 供客户使用该地图 1 -1 到内部服务,这样我就可以传递请求了。 我在解析服务器旁边创建了一个快速中间件函数 运行,它只接受一个传入请求,更改基础 url,添加一个新的 header(与身份验证相关)和 routes/proxies该请求关闭到内部网络服务。

首先,是否可以让解析客户端 api 调用另一个快速端点? 其次,在服务器端验证此调用的最佳方式是什么。

我创建了一个简单的 node.js 测试文件,我在其中使用 javascript/node api 登录解析服务器,然后在 session-token 中设置用户 session-token =30=] 在休息客户端中调用这个新端点,但正在寻找反馈或更好的方法。

var express = require('express');
var request = require('request');
var ParseServer = require('parse-server').ParseServer;
...

var api = new ParseServer({
    ...
});

app.use('/parse', api);

// Middleware function to auth request against parse and forward to other  web service
app.use('/api/', function (req, res, next) {

    var currentToken = req.headers['x-parse-session-token'];

    //TODO, validate user token.. HOW BEST?

    if (currentToken) {
        // Query Parse for some user related data to add to request
        // Modify request and forward to other web service
        var newUrl = apiServerHost + req.baseUrl;

        req.pipe(request(newUrl)).pipe(res);

    } else {
        res.send('Unknown parse user');
    }
});
...

所以。我刚刚创建了一个快速中间件函数来检查 x-parse-session-token header,然后调用 /parse/users/me.

app.use(function (req, res, next) {
  unirest.get(env.getParseURL() + '/users/me')
  .headers({
    'X-Parse-Application-Id': env.getApplicationId() ,
    'X-Parse-REST-API-Key': env.getRestApiKey(),
    'X-Parse-Session-Token': req.header("x-parse-session-token") })
  .send({})
  .end(function(userData){

如果响应是 200 并且在响应的 body 中包含一个用户(使用 Parse.Object.fromJSON),那么 session 是有效的,所以我将请求转发到另一个内部添加一些内部身份验证后的服务 headers.