2016-05-05 4 views
3

私たちが構築している新しいモバイルアプリケーション用のコンテンツをサービスするために内部的にparse-serverをホストする予定です。ユーザーに構文解析サーバーを使用し、他の内部REST Webサービスを呼び出す

また、私たちは、私たちが解析しているものに加えて私たちのモバイルクライアントが使用することを望む内部RESTサービスをいくつか持っています。 これらの内部RESTサービスを呼び出す前に、解析サーバーユーザー、認証およびセッション管理を活用したいと思います。

私は、彼らが唯一のPOSTを受け入れるよう、クラウドコード機能がかなり限られていることを見つけて、クライアントが使用するために、私はより多くのRESTfulなAPIをたいことは、内部サービスへの1-1をマップするので、私はちょうど要求を渡すことができます一緒に。 私は、リクエストを受信し、ベースURLを変更し、新しいヘッダ(auth関連)を追加し、内部Webサービスにリクエストするルート/プロキシを追加する構文解析サーバと並行して実行するExpressミドルウェア機能を作成しました。

まず、この他のエクスプレスエンドポイントを呼び出すために解析クライアントAPIを取得することは可能でしょうか? 第2に、サーバー側では、この呼び出しを認証する最も良い方法は何でしょうか。

単純なnode.jsテストファイルを作成しました。このファイルでは、javascript/node apiを使用して解析サーバーにサインインし、残りのクライアントのヘッダーにユーザーセッショントークンを設定してこの新しいエンドポイントを呼び出しますフィードバックやより良いアプローチのために。

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'); 
    } 
}); 
... 
+0

クラウドコードが要求を受け入れるだけの場所を確認してください。 https://www.parse.com/docs/cloudcode/guide#cloud-code-advanced –

+0

クラウドコード関数を呼び出すには、parse apiがyourapp.com./parse/functions/yourfunctionnameへのPOSTを行います。もちろん、HttpRequestライブラリを使用してクラウド機能内からGET/PUTなどを作成することもできますが、クライアントからのPOSTを使用して最初にコールを開始します。 – coweye

+0

右。私は**あなたのコメントを文字通り解釈しました。 –

答えて

2

So.私は、x-parse-session-tokenヘッダーをチェックしてから、/ 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を使用)が含まれている場合、セッションは有効ですので、私はいくつかの内部認証を追加した後、他の内部サービスへの要求を転送ヘッダー。

関連する問題