2016-10-03 17 views
2

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

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

答えて

2

前述のとおり、私はP'unk AvenueのApostropheの主任建築家です。

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

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

apos.usersinsertメソッドが私たちのためにパスワードをハッシュするコードはありません。

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 }を持つオブジェクトです。

アポストロフィのコンテンツタイプで問題なく処理する方法について、確かな基礎を得るには、reading this tutorial on Apostrophe's model layerをお勧めします。 MongoDBは直接使うことができますが、いつ実行するのか、そうしないのかを知る必要があります。

ユーザーを追加するときに、より多くのプロパティを渡すことができます。合理的な行動のための最小限のものです。あなたはconstruct内のプロジェクトレベルでlib/modules/apostrophe-users/index.jsに追加した場合

メソッドを呼び出すと、あなたはミドルウェアから、このように呼び出すことができます:

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(); 
}); 

希望、これは便利です!

+0

ありがとうございました。これは間違いなく有用です。あなたの提案を理解したら、私はlib \ modules \ apostrophe-usersモジュールで構築するためにself.AddUserを追加します。私はアポストロフィーエクスプレスモジュールで実行しているチェックからこのメソッドを呼び出すとします: ミドルウェア:[ 関数(req、res、next){ const email = // cookieから const auth = // cookieから if(email && auth){ //ここでaddUserを呼び出す方法は? //apostrophe-users.addUser(req、email、 ''、 'admin'、null) } } 呼び出し方法がわかりませんか? –

+0

自動ログインユーザー(demo-autologinモジュール)で提供した他の回答を見ると、self.pageBeforeSendメソッドを使用します。私はこれがマッチするルートでのみ実行されると考えていましたが、app.jsでモジュールが定義されているため、リクエストごとに実行されるようです。私の理解から、このself.pageBeforeSendメソッドを使用して、リクエストとaposオブジェクトへのアクセス権を持つ任意のページリクエストで必要なコードを実行できます。これが各リクエストでコードを実行する方法でない場合は、より良いアプローチを教えてください。 –

+0

あなたが提案するようにこのメソッドをapostrophe-users/index.jsに追加すると、別のモジュールのミドルウェア関数から次のように呼び出されます。 return self.apos.users.addUser(req、username、password、 (){ //表示されている通りにエラーを処理すると、一方向は403禁止された応答です res.statusCode = 403; return res.send( 'forbidden') ; } // newUserは新しいユーザーです。それらをログインしてリダイレクトすることができます。 //別の場所であなたに渡したコードでリダイレクトするか、リクエストを続行してください: return next(); }); –

関連する問題