解析无法检索用户电子邮件

时间:2019-04-15 14:43:48

标签: javascript parse-platform

在运送.js文件之前,我使用的是Parse Server的最新版本以及Typescript编译功能。请注意,整个问题是特定于Cloud Code的,而不是客户端实现的。

到目前为止,这一直很好,但是现在我发现了一个我不知道如何解决的问题。考虑一个用于处理电子邮件事件的类,该类具有一种查找给定ID的用户电子邮件并向他发送消息的方法:

async sendEmailToUserID(userId: string, subject: string, text: string){

    const res = await new Parse.Query("User").equalTo("objectId", userId).find();
    if(res){
        const user = res[0];
        const email =  user.get("email");
        return await this.sendEmail(email, subject, text);
    }
}

我认为该功能非常简单,可以轻松地自我解释。好吧,事实是find()函数可以正确地检索用户的对象,但是.get(“ email”)不会起作用:它总是返回“ undefined” 。 >

任何人都知道为什么会这样吗?

PD:是的,任何给定用户都存在“电子邮件”字段。

2 个答案:

答案 0 :(得分:1)

电子邮件是一个敏感字段,在发送给客户端进行匿名请求之前已从服务器上剥离。

您已经注意到,可以将'userMasterKey'添加到客户端查询中,但是绝对不要这样做,因为masterKey是一个秘密,表明解析服务器的整个安全性都取决于保持秘密(例如密码)。< / p>

可以在服务器上,在云代码中或在具有主密钥的php服务器上进行查询,但是在客户端代码(iOS,浏览器中的js, android等)

您可以将电子邮件和其他敏感字段提供给已验证的用户。这是一项新功能,但尚未有充分的文档说明,但是您可以从测试中查看其用法:https://github.com/parse-community/parse-server/blob/f2c332ea6a984808ad5b2e3ce34864a20724f72b/spec/UserPII.spec.js#L526

答案 1 :(得分:-1)

好吧,花了一段时间才意识到如何找到它,因为Parse对此没有任何错误。问题是我试图在不使用主密钥的情况下访问受保护的User类对象。

请注意,以下解决方案仅适用于Cloud Code;从客户端代码使用绝对不安全:

只需将{useMasterKey:true}添加到.find()方法中,它将起作用:

const res = await new Parse.Query("User").equalTo("objectId", userId).find({useMasterKey: true});