2

ユーザーをアポストロフィ (aposUsersSafe コレクション) に自動追加するモジュールを拡張 (または独自に作成) したいと考えています。

これを行うための組み込みメソッドが apostrophe-users モジュールに見当たりません。実装方法に関するガイダンスを探していますか? ありがとう!

4

1 に答える 1

2

前に述べたように、私は P'unk Avenue の Apostrophe の主任設計者です。

このaposUsersSafeコレクションは、パスワード ハッシュと、密接に関連するいくつかのプロパティのみの非正規化されたコピーを格納するためのものです。通常、直接操作する必要はありません。アポストロフィの他のすべてのドキュメントと同様に、ユーザーはaposDocsコレクションに住んでいます。そして、そのタイプのピースを管理するモジュールによって提供されるメソッドを介してそれらと対話するのが最善です。この場合、それはapos.users(apostrophe-usersモジュール) になります。

この方法をチェックしてください。addFromTaskこれは、ユーザーの追加を実装し、ユーザーをグループに追加する のメソッドから軽くリファクタリングされてapostrophe-usersいます。これは、ほぼ確実にやりたいことです。

パスワードをハッシュするためのコードはここにはありませinsertapos.users

self.addUser = function(req, username, password, groupname, callback) {
  // find the group
  return self.apos.groups.find(req, { title: groupname }).permission(false).toObject(function(err, group) {
    if (err) {
      return callback(err);
    }
    if (!group) {
      return callback('That group does not exist.');
    }
    return self.apos.users.insert(req, {
      username: username,
      password: password,
      title: username,
      firstName: username,
      groupIds: [ group._id ]
    }, { permissions: false }, callback);
  });
};

permission(false)カーソルで呼び出され、オプションオブジェクトが{ permissions: false }挿入に渡されます。これは、誰がトリガーしたかに関係なく、この時点でこれが発生することを想定しているためです。

Apostrophe のモデル レイヤーに関するこのチュートリアルを読んで、トラブルに巻き込まれることなく Apostrophe のコンテンツ タイプを操作する方法をしっかりと理解することをお勧めします。MongoDB を直接使用することもできますが、いつそれを行うべきか、いつ行うべきでないかを知る必要があります。

ユーザーを挿入するときに、より多くのプロパティを渡すことができます。これは、合理的な動作のための最低限の設定です。

lib/modules/apostrophe-users/index.jsメソッドの呼び出しについては、プロジェクト レベルでに追加する場合construct、ミドルウェアから次のように呼び出すことができます。

return self.apos.users.addUser(req, username, password, groupname, function(err, newUser) {
  if (err) {
    // Handle the error as you see fit, one way is a 403 forbidden response
    res.statusCode = 403;
    return res.send('forbidden');
  }
  // newUser is the new user. You could log them in and redirect,
  // with code I gave you elsewhere, or continue request:
  return next();
});

これが役に立てば幸いです!

于 2016-10-03T23:29:26.660 に答える