Flatironスタックに認証と承認を実装したいと考えています (Flatiron、Resourceful、Restful を使用)。リソースを変更しようとするときに、ユーザーが必要な権限を持っていることを要求したいと考えています。Restful Readme ファイルには、承認に関するメモがあります。
restful で公開されているリソース メソッドにアクセスするためのセキュリティと承認を提供するには、いくつかの方法があります。承認の推奨されるパターンは、
before
およびafter
フックに対する機知に富んだ機能を使用することです。これらのフックでは、追加のビジネス ロジックを追加して、リソースのメソッドへのアクセスを制限できます。認可ロジックをルーティング レイヤーに配置することはお勧めしません。理想的には、ルーターがリソースの反映されたインターフェイスになるためです。理論的には、リソースにはすべて同じビジネス ロジックを必要とする複数の反映されたインターフェイスが存在する可能性があるため、ルーター自体のセキュリティはあまり重要ではありません。
TL;DR; セキュリティと承認のために、 機知に富んだフック
before
とafter
フックを使用する必要があります。
そのため、認可は Resourceful のフック システムで処理できます。
私の実際の問題は、すべての HTTP リクエストの開始時の認証プロセスです。
resource Post
、 a 、User
およびresource があるとしSession
ます。REST API は、Restful を使用して定義されています。この質問に対する私の主な関心事は、投稿を作成するときにユーザーが確実にセッションを行えるようにすることです。のような他のメソッドsave
、update
またはユーザーの作成などの他のリソースの場合も同様に機能するはずです。
ファイルapp.js
:
var flatiron = require('flatiron');
var app = flatiron.app;
app.resources = require('./resources.js');
app.use(flatiron.plugins.http);
app.use(restful);
app.start(8080, function(){
console.log('http server started on port 8080');
});
ファイルresources.js
:
var resourceful = require('resourceful');
var resources = exports;
resources.User = resourceful.define('user', function() {
this.restful = true;
this.string('name');
this.string('password');
});
resources.Session = resourceful.define('session', function() {
// note: this is not restful
this.use('memory');
this.string('session_id');
});
resources.Post = resourceful.define('post', function() {
this.restful = true;
this.use('memory');
this.string('title');
this.string('content');
});
resources.Post.before('create', function authorization(post, callback) {
// What should happen here?
// How do I ensure, a user has a session id?
callback();
});
コードの実行可能なバージョンもあります(@generalhenry に感謝)。
したがって、ユーザーが投稿を作成しようとしていると仮定すると、セッション ID が既に与えられており、Cookie ヘッダーによって行われるすべての要求と共に送信されます。authorization
before フック (つまり、コールバック)でその Cookie にアクセスするにはどうすればよいですか?
この例は で開始できnode app.js
、HTTP リクエストは を使用して行うことができますcurl
。