Parse не может получить электронную почту пользователя - PullRequest
0 голосов
/ 15 апреля 2019

Я использую последнюю версию Parse Server с компиляцией Typescript перед отправкой файлов .js. Имейте в виду, что весь этот вопрос относится к облачному коду, а не к реализации клиента.

До сих пор это работало довольно хорошо, но теперь я нашел проблему, которую серьезно не знаю, как ее решить. Рассмотрим класс для обработки событий электронной почты, в котором есть метод поиска электронной почты пользователя по заданному идентификатору и отправки ему сообщения:

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: да, поля «email» существуют для любого данного пользователя.

Ответы [ 2 ]

1 голос
/ 21 апреля 2019

электронная почта - это конфиденциальное поле, которое удаляется с сервера перед отправкой клиенту для анонимных запросов.

Как вы заметили, вы можете добавить 'userMasterKey' к клиентскому запросу, но вы никогда не должны этого делать, поскольку masterKey является секретом, что вся безопасность вашего сервера синтаксического анализа зависит от сохранения секретности (например, пароля).

Можно выполнять запросы на сервере, в облачном коде или на php-сервере с главным ключом, но никогда нельзя использовать главный ключ в коде на стороне клиента (ios, js в браузере, Android и т. д.)

Вы можете сделать электронную почту и другие конфиденциальные поля доступными для аутентифицированных пользователей. Это новая функция, которая еще недостаточно документирована, но вы можете увидеть, как она используется из тестов: https://github.com/parse-community/parse-server/blob/f2c332ea6a984808ad5b2e3ce34864a20724f72b/spec/UserPII.spec.js#L526

0 голосов
/ 15 апреля 2019

Хорошо, потребовалось время, чтобы понять, как его найти, так как у Parse нет ошибок, посвященных этому. Проблема в том, что я пытался получить доступ к объекту класса User, который защищен, без использования мастер-ключа.

Имейте в виду, что следующее решение предназначено только для облачного кода; это определенно не безопасно при использовании из клиентского кода:

Просто добавьте {useMasterKey: true} к методу .find (), и он будет работать:

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