解析云 - 通过objectId获取用户信息

时间:2017-07-10 01:33:21

标签: parse-platform parse-cloud

我正在尝试从Parse Cloud中的用户类获取用户信息。 lang 用户类中的一列。我想得到用户的 lang 。我的整个Cloud Code如下(它不起作用):

Parse.Cloud.beforeSave('Order', function(request, response) {

    var orderState = request.object.get('orderState');
    var subtitleMessage = '';

    var userLang = '';
    var currentUser = request.object.get('user');
    var userQuery = new Parse.Query(Parse.User);
    userQuery.equalTo('objectId', currentUser.id);
    .find()
    .then((result)=>{
        userLang = result.get('lang');
    })

    if (orderState === undefined || ['nonApproved', 'approved', 'delivered', 'canceled'].indexOf(orderState) < 0) {
        response.error("OrderState is null or not one the ['nonApproved', 'approved', 'delivered', 'canceled']!");
    } else {
        var query = new Parse.Query(Parse.Installation);
        query.include('user');
        query.equalTo('user', request.object.get('user'));

        Parse.Push.send(
            {
                where: query,
                data: {
                    title: "MyTitle",
                    alert: subtitleMessage
                }
            },
            {
                success: function() {
                },
                error: function(error) {
                    response.error(error)
                },
                useMasterKey: true
            }
        );
        response.success();
    }
});

2 个答案:

答案 0 :(得分:1)

Jake T.的答案有一些好处。根据他的回答和你对这个问题的评论,你可以尝试这样的事情:

Parse.Cloud.beforeSave('Order', function(request, response) {
  var currentUser = request.object.get('user');
  currentUser.fetch({useMasterKey: true}).then(function(user) {
    var userLang = user.get('lang');
    // send push notifications based on userLang here
    response.success();
  }).catch(function(error) {
    // handle any errors here
    console.error(error);
  });
});

答案 1 :(得分:0)

验证您实际拥有来自request.object.get("user");的用户对象shell,如果这样做,您只需调用currentUser.fetch()而不是执行查询,除非您可能需要包含其他对象。< / p>

由于您使用了查询,因此结果是一个数组,即使只返回一个对象(或者没有,它只是[])。所以,你正在做Array.get("lang"),它不应该做任何事情。试试if( results && results.length > 0 ) user = results[0];,然后您就可以访问user.get("lang");

您应该为User类设置ACL / CLP。理想情况下,非用户或主人不应访问这些内容。因此,如果设置正确,您的解决方案可能会将{useMasterKey:true}作为选项传递给查询/获取。