我想扩展一个模块(或创建自己的)以将用户自动添加到撇号(aposUsersSafe集合)。自动将用户添加到撇号
我在撇号用户模块中没有看到任何内置方法来做到这一点,并且正在寻找一些关于如何实现它的指导?谢谢!
我想扩展一个模块(或创建自己的)以将用户自动添加到撇号(aposUsersSafe集合)。自动将用户添加到撇号
我在撇号用户模块中没有看到任何内置方法来做到这一点,并且正在寻找一些关于如何实现它的指导?谢谢!
正如前面提到的,我是P'unk大道撇号的首席设计师。
aposUsersSafe
集合仅用于存储密码散列和一些非常规相关属性的非规范化副本。您通常不需要直接与它进行交互。像撇号中的所有其他文档一样,用户生活在aposDocs
集合中。最好通过管理该类型块的模块提供的方法与它们进行交互。在这种情况下,这将是apos.users
(apostrophe-users
模块)。
查看此方法;这是从addFromTask
方法apostrophe-users
轻微重构,它实现了添加一个用户,并将它们添加到一个组,你几乎肯定也会这样做。
这里没有代码来散列密码,因为apos.users
的insert
方法会为我们做。
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为如何与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();
});
希望这是有帮助的!
谢谢。这绝对有帮助。如果我理解你的建议,我会添加self.AddUser来构建我的lib \ modules \撇号用户模块。然后,我想从我在我的撇号快速模块中执行的检查中调用此方法: '中间件:[ 函数(req,res,next){0}从cookie if(email && auth){ //我如何在这里调用addUser? //apostrophe-users.addUser(req,email,'','admin',null) } }' 不知道如何调用? –
查看您在自动登录用户(demo-autologin模块)中提供的其他答案,可以使用self.pageBeforeSend方法。我以为这只会在匹配的路由上执行,但看起来这是由于在app.js中定义的模块而在每个请求上执行的。从我的理解,这self.pageBeforeSend方法可以用来执行任何代码我想要在任何页面请求 - 有权访问请求和对象。如果这不是在每个请求上执行代码的方式,您能指出我更好的方法吗? –
如果您按照您的建议将此方法添加到撇号users/index.js中,那么您将从另一个模块的中间件函数中调用此方法: return self.apos.users.addUser(req,username,password, groupname,function(err,newUser)if(err){//处理错误,你认为合适,一种方式是403禁止响应 res.statusCode = 403; return res.send('forbidden') ; } // newUser是新用户,您可以登录他们并重定向, //带我在其他地方给出的代码,或继续请求: return next(); }); –