Как сохранить пользователя, который не вошел в систему с Parse?

Я работаю над приложением, которое требует возможности поиска партнеров для игры. Очевидно, что сохранение для пользователя не является проблемой, но я не уверен, что будет лучшим способом изменить данные для другого пользователя. Возможно, отправка сообщения другому пользователю, который автоматически получает информацию при входе и добавляет статус отношения?

Вот что у меня есть - он находит случайного игрока из всех игроков, также ищущих игру, и добавляет их в отношение "партнеры". Теперь, как бы это произошло с другим пользователем?:

- (IBAction)searchForPlayer:(id)sender {


     [self.currentUser setObject:@0 forKey:@"searching"];

    PFQuery *findPotential = [PFQuery queryWithClassName:@"_User"];
    [findPotential whereKey:@"searching" equalTo:@1];
    [findPotential findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {

        int partnerNum = arc4random_uniform(objects.count);
        PFUser *newPartner = [objects objectAtIndex:partnerNum];

        if(error){
            NSLog(@"Error!");
        }

        else {

            if (objects.count == 0|| [newPartner.objectId isEqualToString:self.currentUser.objectId]) {
                NSLog(@"None found");
                [self.currentUser setObject:@1 forKey:@"searching"];
            }

            else {

                PFRelation *partners = [self.currentUser relationForKey:@"partners"];
                [partners addObject:newPartner];
                NSLog(@"Partner is: %@", newPartner.username);
                [self.currentUser setObject:@0 forKey:@"searching"];
            }
        }
    }];

[self.currentUser saveInBackgroundWithBlock:^(BOOL succeeded, NSError *error) {
    if(error){
        NSLog(@"Error!");
    }
  }];
}

1 ответ

Решение

Вы никогда не хотите делать что-то подобное на стороне клиента. В целях безопасности Пользователь не может изменять другого пользователя. Используйте облачный код. Вызовите функцию, и в этой функции убедитесь, что вы действительно хотите это сделать, а затем используйте мастер-ключ для запроса и изменения других объектов.

В основном вы можете просто преобразовать ваш запрос / пример Objective-C в JavaScript, поместить его в облачную функцию, которая принимает несколько параметров, и поместить это вверху:

Parse.Cloud.useMasterKey();

Или вы можете предоставить мастер-ключ индивидуально для конкретных методов, таких как:

object.save(null, { useMasterKey: true }).then(function(object) { ...

Читайте о документах Cloud Code здесь: https://parse.com/docs/cloud_code_guide

Другие вопросы по тегам