Насколько безопасен Парс PFUser.current () object?

У меня есть вопрос о безопасности разбора и надеюсь, что кто-то может дать мне некоторые указания и предложения.

Я работаю над игрой, где пользователи могут накапливать игровой ресурс под названием gold.

Чтобы отслеживать, сколько золота у каждого пользователя, у меня есть класс разбора под названием Resource. Этот класс является общедоступным для чтения (через get, не найти), но не общедоступным для записи.

Пользовательский класс и класс ресурсов связаны в обоих направлениях:
каждый объект в пользовательском классе имеет свойство resourceId, которое является objectIdобъектом ресурса, принадлежащим пользователю. Таким образом, игроки могут читать (через get) его собственный ресурс, а также его друзей; и
каждый объект в классе ресурсов имеет указатель, указывающий на пользователя в классе User

В игре пользователь может вращать призовое колесо, чтобы получить золотые призы. Когда пользователь вращает колесо, клиент вызывает функцию облачного кода и передает один аргумент, который является PFUser.current()объектом.

Облачный код генерирует случайное число, определяющее приз, а затем записывает приз в класс ресурсов. Чтобы определить, какой объект ресурса для записи, облачный код выполняет 2 действия:
(1 ) он читает resourceIdот аргумента(PFUser.current()), и
(2) используя это resourceId, он получает соответствующий объект ресурса, а затем проверяет, указывает ли указатель пользователя на тот же объект пользователя, что и сам аргумент (сноваPFUser.current()).

Таким образом, мой вопрос заключается в том, является ли моя установка безопасной против того, кто пытается вращать призовое колесо другого пользователя? Может ли скомпрометированное клиентское устройство изменять PFUser.current()объект и притворяться другим пользователем? Есть ли лучшие способы достичь того, что я хочу сделать?

1 ответ

  1. Использовать это:

    Parse.Cloud.define("myFunction", function (request, response) {
    
    var senderUser = request.user;
    
    //your code
    
    });
    

    Это определенно лучший способ, чем передача PFUser.current()в качестве аргумента — он работает с SDK Parse внутренне, что означает, что его должно быть сложнее подделать, чем аргумент.