Сохранение атрибутов для пользователя, полученного из запроса (т.е. не для 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, чтобы помочь в борьбе с ошибочными дубликатами.

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