我想扩展一个模块(或创建我自己的模块)以自动将用户添加到Apostrophe(aposUsersSafe集合)。
我没有在撇号用户模块中看到任何内置方法来执行此操作,并且正在寻找有关如何实现它的一些指导?谢谢!
答案 0 :(得分:2)
如前所述,我是P'unk Avenue的Apostrophe的主要设计师。
aposUsersSafe
集合仅用于存储密码哈希值和一些密切相关的属性的非规范化副本。您通常永远不需要直接与它进行交互。与Apostrophe中的所有其他文档一样,用户都位于aposDocs
集合中。并且最好通过管理该类型的模块提供的方法与它们进行交互。在这种情况下,那将是apos.users
(apostrophe-users
模块)。
查看此方法;这是从addFromTask
的{{1}}方法轻轻地重构的,它实现了添加用户并将它们添加到一个组中,你几乎肯定也想要这样做。
此处没有代码来散列密码,因为apostrophe-users
的{{1}}方法会为我们执行此操作。
insert
在游标上调用 apos.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);
});
};
的选项对象传递给insert,因为我假设您希望在此时发生这种情况,无论是谁触发它。
我建议reading this tutorial on Apostrophe's model layer为如何使用Apostrophe的内容类型奠定坚实的基础而不会遇到麻烦。您可以直接使用MongoDB,但是您必须知道何时执行此操作以及何时不使用。
插入用户时可以传递更多属性;这只是合理行为的最低限度。
至于调用方法,如果你要在permission(false)
内的项目级别将它添加到{ permissions: false }
,那么你可以从中间件这样调用它:
lib/modules/apostrophe-users/index.js
希望这有用!