node.js - 为用户和身份验证使用解析服务器并调用其他内部 REST Web 服务

标签 node.js express parse-server

我们计划在内部托管解析服务器,为我们正在构建的新移动应用提供内容服务。

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

我发现云代码功能非常有限,因为它们只接受 POST,我想要一个更 RESTful 的 api,供客户端使用将 1-1 映射到内部服务,这样我就可以传递请求. 我创建了一个与解析服务器一起运行的快速中间件功能,它只接收传入请求、更改基本 url、添加新 header (与身份验证相关)和请求到内部网络服务的路由/代理。

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

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

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 并且在响应正文中包含用户(使用 Parse.Object.fromJSON),则 session 有效,因此我在添加一些内部身份验证 header 后将请求转发到其他内部服务。

关于node.js - 为用户和身份验证使用解析服务器并调用其他内部 REST Web 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37055936/

相关文章:

javascript - 无法在函数外部访问数组元素

javascript - MongoDB,如何创建一个空集合?

node.js - Expressjs 和 Body-parser 发布文章

javascript - NodeJS、Express、Jade POST JSON 到数据库

swift - 从解析本地数据存储中删除对象 unpinAll 不起作用

java - 如何批量更新 User 类(Parse.com,Android)中的所有对象?

node.js - 在 nodejs 中处理多个数据库调用的最佳方法是什么

javascript - Node js - 如何返回多维数组

node.js - response.end 和 response.send 有什么不同?

swift - 解析用户密码重置 Swift iOS