6

Meteor アプリにログインした人だけがファイルをダウンロードできるように、フォルダーを制限するにはどうすればよいですか?

これを行うための複数の方法を調べましたが、主な問題は、次のようにアクセスできないことです( I get null.):

Meteor.user() or this.userId()

私は試した:

__meteor_bootstrap__.app
    .use(connect.query())
    .use(function(req, res, next) {
        Fiber(function () {  

          // USER HERE?

        }).run();
    });

また

__meteor_bootstrap__.app.stack.unshift({

    route: "/protected/secret_document.doc", // only users can download this

    handle: function(req, res) { Fiber(function() {

        // CHECK USER HERE ?

        // IF NOT LOGGED IN:
        res.writeHead(403, {'Content-Type': 'text/html'});
        var content = '<html><body>403 Forbidden</body></html>';
        res.end(content, 'utf-8');
    }).run() }
});
4

2 に答える 2

3

ファイルをmongodbに保存してみると、コレクション システムにフックされ、クライアントとサーバーでクエリ可能になります。次に、関連データを特定のユーザーのクライアントに公開するか、Meteor.methods を使用してそのように情報を公開します。

例:

ファイルが MongoDB に保存されていると仮定して、まずそれらをクライアントに公開しましょう。

Meteor.publish("files", function(folder) {
  if (!this.userId) return;
  // the userHasAccessToFolder method checks whether
  // this user is allowed to see files in this folder
  if (userHasAccessToFolder(this.userId, folder))
    // if so, return the files for that folder
    // (filter the results however you need to)
    return Files.find({folder: folder});
});

次に、クライアントで、公開されたチャネルを自動サブスクライブして、チャネルが変更されるたびに更新されるようにします。

Meteor.startup(function() {
  Meteor.autosubscribe(function() {
    // send the current folder to the server, 
    // which will return the files in the folder
    // only if the current user is allowed to see it
    Meteor.subscribe("files", Session.get("currentFolder"));
  });
});

注意。上記のコードはテストしていないので、疑似コードと考えてください。ただし、この問題を解決するための一般的な方向性を示しているはずです。難しいのは、ファイルをmongodbに保存することです!

于 2012-12-25T01:19:36.773 に答える
2

なぜ機能しMeteor.user()ないのか、もっと心配です。

いくつかの質問:

  • あなたは流星0.5.0にいますか?
  • 隕石プロジェクトに追加accounts-baseしましたか?
  • meteor のログイン システム ( 、 など) を使用したことがありますaccounts-passwordaccounts-facebook? (オプション -accounts-ui使いやすさのため?)
  • 自動公開はまだですか?または、発行/購読を適切に設定していますか?

Meteor.user() は現在のユーザーである必要があり、Meteor.users は以前にログインしたすべてのユーザーの Meteor コレクションである必要があります。

于 2012-12-28T19:26:04.733 に答える