2017-05-07 9 views
0

私は認証層を追加していますが、私はそれが1つのトリッキーな詳細を除いて考え出したと思います。 My Meteorアプリケーションにはルートがありませんが、接続ミドルウェアにフックを追加して、正しいAPIトークンがない場合は「/」ルートエラーが発生します。トークンが大丈夫なら、next()に電話してルートを流星に転送します。要求ごとのセッション?

問題は、トークンによっては、接続のサーバー側のパラメータを設定する必要があり、これを行う方法がわかりません。たとえば、権限レベルにマップされたAPIキーの静的リストがあるとします。ユーザーが「ADMIN_API_KEY」のリクエストを送信した場合は、をMeteorサーバーの機能で使用するように設定したいと考えています。 SessionはMeteorのクライアント用です。

# this code's in coffeescript 

    WebApp.connectHandlers.use '/', (req, res, next) -> 
    validator = new RequestValidator(req, next) 
    validations = [ 
     "valid_namespace", 
     "only_https" 
    ] 
    error = validator.validate(validations) 
    next(error) 
    # <<<<<<<<<<<<<<<<<<<<<<<< 
    # Here I want to set some config option which can be 
    # read by the server in the same way it can read things like 
    # Meteor.user() 

私はちょうどsession[:permission_level] = "admin"と言うでしょう。しかし、メテオではこのように動作しないようです。

ところで、私はメテオではまだルーティングパッケージを使用していませんが、もしそれが私よりも簡単になるのであれば。

答えて

1

私は私が私のREST APIの

import { DDP } from 'meteor/ddp'; 
import { DDPCommon } from 'meteor/ddp-common'; 

export const authMiddleware = (req, res, next) => { 
    const userId = identifyUser(req); // parse the request to get the token you expect 
    if (!userId) { 
    return next(); 
    } 

    DDP._CurrentInvocation.withValue(new DDPCommon.MethodInvocation({ 
    isSimulation: false, 
    userId, 
    }),() => { 
    next(); 
    // in that context, Meteor.userId corresponds to userId 
    }); 
}; 

のようなものをやってきたSessionわからないんだけど、それがうまくユーザIDをに関するし、中に呼び出すべきである流星関数を呼び出すことができるという作品DDPコンテキスト(Users.find(...)など)。

+0

この段階ではログインしていないユーザーがいるため、有効なユーザーIDを取得できませんでした –

+0

私は、グローバルに見えるSessionのようなものを使うことができるが、実際には特定のコンテキストにリンクされていることを前進させる最善の方法が何であるか分からない。私はすべてのパラメータを渡して、単純なノードのバックエンドとしてこれらのケースでメテオを使用して終了しました – Guig

+0

流星に利用できるメソッドを見て私は基本的にはセスンidであることがわかります –