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

Parse Cloud - Get user informations by objectId

我正在尝试从 Parse Cloud 中的 User class 获取用户语言。 langUser class 中的列之一。我想获得用户的 lang。我的整个云代码如下(没有用):

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

验证你确实有一个来自 request.object.get("user"); 的用户对象 shell 而且,如果你这样做,你可以只调用 currentUser.fetch() 而不是执行查询,除非你有其他对象可能需要包括。

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

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

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