我正在为我的Apostrophe CMS安装上的用户添加密码重置功能。我使用此代码通过电子邮件地址查找用户并创建新令牌供以后使用:(在lib / modules / apostrophe-users / index.js中)
module.exports = {
construct: function(self, options) {
self.route('post', 'send-reset-token', function (req, res) {
var email = req.body.email;
var usersModule = self.apos.modules['apostrophe-users'];
var userList = usersMods.find(req, {email: email}, {permissions: false});
userList.toArray(function (err, arr) {
if (arr.length > 0) {
//Create token
}
});
}
}
}
但是,当此请求来自未登录的会话(这是重置点)时,用户列表为空。我认为(从阅读文档)将options.permissions参数设置为false,它将使用户不首先检查权限,但它似乎没有工作。当我以管理员身份登录时,我可以正确地获得用户。
在没有请求者有权查看用户的情况下,我是否需要在服务器端找到此用户?
答案 0 :(得分:2)
find
的第二个参数是MongoDB标准对象。 permissions
不是集合中任何对象的属性,因此您什么都不回来。
permission
是单数,它是一个游标过滤器方法,而不是选项对象的属性。我们不使用find
的选项对象,因为可链接的过滤方法更灵活,可记录且可测试。
您正在寻找的是:
return usersModule.find(req, {email: email}).permission(false).toObject(function(err, user) {
if (user) {
// There was a user
}
})
请注意permission
在这里是单数。
唯一可以找到这个被描述为选项对象一部分的地方是旧版本0.5的文档。 0.5的官方文档在顶部有一个很大的警告。如果您在没有警告的情况下在页面上找到此信息,请告诉我,我可以努力解决此问题。