Как сохранить пользователя, который не вошел в систему с 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