StrongLoop:更新currentUser而不输入密码?

时间:2015-03-10 21:57:09

标签: angularjs put loopbackjs strongloop

设置

  • Strongloop / loopback:^ 2.10.2
  • AngularJS 1.3

问题

在配置文件页面上,用户模型会更新,但不应传输密码(无论如何都要进行散列并且不可用)。

方法

所以我尝试了以下内容。

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

user-object是$ ressouce,它确实向服务器创建 PUT / users /?id = 1 请求,但strongloop尝试INSERT实体而不是更新,并且错误弹出:

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

问题

如何告诉strongloop在PUT中进行更新而不是插入?

谢谢!

3 个答案:

答案 0 :(得分:0)

发现了一个非常糟糕的解决方案,只应该使用,直到真正的修复程序投入生产。这是错误的配置和重复的代码,但至少它是有效的。

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);

答案 1 :(得分:0)

下面的代码对我有用,希望它会有所帮助。

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);

答案 2 :(得分:0)

提供了一种解决方法here

因此,在您的代码中,请使用以下

替换对user.$save的调用
userData = {'someCustomUserProperty':'someValue'};
User.prototype$updateAttributes({ id: user.id }, userData);