1

我正在为我的 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,它会在不先检查权限的情况下让用户获得,但它似乎不起作用。当我以管理员身份登录时拨打此电话时,我可以正确获取用户。

在请求人有权查看用户的情况下,我还需要做些什么才能在服务器端找到该用户吗?

4

1 回答 1

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 的官方文档顶部有一个很大的警告。如果您在没有警告的情况下在页面上找到了此信息,请告诉我,我可以努力解决这个问题。

于 2017-07-24T21:15:46.133 回答