Сохранение атрибутов для пользователя, полученного из запроса (т.е. не для currentUser)
Я заинтересован в сохранении атрибутов для пользователей в базе данных на основе действий, которые выполняет мой currentUser
, Основываясь на следующем коде, я получаю сообщение об ошибке "Пользователь не может быть сохранен, если он не был аутентифицирован через логин или регистрацию"
NSString *IDToFetch = @"some_id";
PFQuery *query = [PFUser query];
[query whereKey:@"user_id" equalTo:IDToFetch];
PFUser *foundUser = (PFUser *)[query getFirstObject];
foundUser[@"new_column"] = @"Some text";
[foundUser saveEventually]; //here an exception is thrown
Мне было интересно, есть ли способ обойти это, где я мог бы сохранить атрибуты в foundUser
без необходимости входа этого пользователя. Спасибо за вашу помощь!
2 ответа
Если вы хотите обновить пользователя, который еще не вошел в систему, вам нужно вызвать Parse, используя master-key
,
Вы можете сделать это из CloudCode например;
Parse.Cloud.define('editUser', function(request, response) {
var userId = request.params.userId,
newColText = request.params.newColText;
var User = Parse.Object.extend('_User'),
user = new User({ objectId: userId });
user.set('new_col', newColText);
Parse.Cloud.useMasterKey();
user.save().then(function(user) {
response.success(user);
}, function(error) {
response.error(error)
});
});
и вызывая его из вашего iOS-проекта;
[PFCloud callFunction:@"editUser" withParameters:@{
@"userId": @"someuseridhere",
@"newColText": @"new text!"
}];
OK Предоставляя это как ответ, но в основном не рекомендую это! Я думаю, что в конце дня маршрут облачного кода станет чище. Но это возможно легче..
Вы можете создать другую таблицу, которая соединяется с каждым пользователем.
например.
имя таблицы
user_extra_details
поля
пользователь
Гол
так что другие пользователи могут редактировать это конкретное поле в user_extra_details
Но, как вы подозреваете, это может привести к множеству дополнительных запросов, но это не невозможно, просто... неудобно. Итак, вот как вы получите доступ к своим данным в этой настройке.
PFQuery *userQuery = [PFQuery queryWithTable:@"Users"];
[userQuery whereKey:Some Key equalTo:some value];
PFQuery *userDetails [PFQuery queryWithTable:@"user_extra_details"];
[userDetails whereKey:@"User" inQuery:userQuery];
[userDetails includeKey:@"User"];
[userDetails fetch];
Следует обратить внимание на то, что объекты с дублирующимися деталями, очевидно, будут создавать несколько результатов. Поэтому я предлагаю сделать удаление и вставку, а не обновление объекта extra_detail, чтобы помочь в борьбе с ошибочными дубликатами.