StrongLoop: обновить currentUser без ввода пароля?

Настройка:

  • Сильная петля / петля: ^ 2.10.2
  • УгловойJS 1.3

Проблема:

На странице профиля модель пользователя обновляется, но пароль передаваться не должен (все равно он захеширован и недоступен.).

Подход:

Итак, я попробовал следующее.

user.$save().then(cb);

пользовательский объект представляет собой $ressouce и создает запрос PUT /users/?id=1 к серверу, но strongloop пытается ВСТАВИТЬ объект вместо обновления, и появляется ошибка:

"message":"ER_NO_DEFAULT_FOR_FIELD: Field 'password' doesn't have a default value"

Вопрос:

Как я могу сказать strongloop сделать обновление в PUT, а не вставку?

Благодарю вас!


person Simon Fakir    schedule 10.03.2015    source источник
comment
Кстати. такое же поведение с User.upsert(user, cb);   -  person Simon Fakir    schedule 11.03.2015
comment
У этой проблемы также есть проблема с github. Невероятно, что эта основная проблема еще не решена. -_- github.com/strongloop/loopback-sdk-angular/issues/125   -  person Simon Fakir    schedule 11.03.2015
comment
Ну, не то чтобы невероятно, учитывая, что это не основная функция loopback (хотя и очень удобная), которая, скорее всего, требует некоторой отладки, а время — ограниченный ресурс :)   -  person Overdrivr    schedule 22.11.2016


Ответы (3)


Обходной путь был предоставлен здесь.

Итак, в вашем коде замените вызов user.$save следующим

userData = {'someCustomUserProperty':'someValue'};
User.prototype$updateAttributes({ id: user.id }, userData);
person Overdrivr    schedule 22.11.2016

Найден действительно плохое решение, которое следует использовать только до тех пор, пока не появится настоящее исправление. Это плохо сконфигурированный и дублированный код, но, по крайней мере, он работает.

var urlBase = "/api";
var UserUpdate = $resource(
    urlBase + '/users/:id',{id:'@id'},
    {"upsert": { url: urlBase + "/users/:id", method: "PUT"}}
 );
 UserUpdate.upsert({id: user.id}, user, cb, cb);
person Simon Fakir    schedule 10.03.2015
comment
Вы даже не удосужились посмотреть на другие ответы? - person Overdrivr; 14.12.2016
comment
Тогда другого ответа не было :) но спасибо за замечание - person Simon Fakir; 14.12.2016
comment
Ах хорошо. Извините, если я прозвучал резко, не имел в виду. Я только что передал исправление, предоставленное одним из основных разработчиков, поэтому вам следует попробовать его. И, пожалуйста, рассмотрите возможность выбора любого из ответов как принятого, чтобы закрыть вопрос, если вы считаете, что он решен. Ваше здоровье - person Overdrivr; 14.12.2016

Ниже код работает для меня, надеюсь, это поможет.

var params = {
                access_token: LoopBackAuth.currentUserToken,
                id:LoopBackAuth.currentUserId
            };
            var promise = User.prototype$updateAttributes(
                params,
                user,
                angular.noop,
                angular.noop
            ).$promise;

            promise.then(ok,fail);
person Saikumar Anireddy    schedule 18.11.2016