Parse platform 解析云-通过objectId获取用户信息
我正在尝试从解析云中的user类获取用户langlang是User类中的一列。我想得到用户的lang。我的整个云代码如下(不起作用):Parse platform 解析云-通过objectId获取用户信息,parse-platform,parse-cloud-code,Parse Platform,Parse Cloud Code,我正在尝试从解析云中的user类获取用户langlang是User类中的一列。我想得到用户的lang。我的整个云代码如下(不起作用): Parse.Cloud.beforeSave('Order',函数(请求,响应){ var orderState=request.object.get('orderState'); var-message=''; var userLang=''; var currentUser=request.object.get('user'); var userQuery=
Parse.Cloud.beforeSave('Order',函数(请求,响应){
var orderState=request.object.get('orderState');
var-message='';
var userLang='';
var currentUser=request.object.get('user');
var userQuery=newparse.Query(Parse.User);
userQuery.equalTo('objectId',currentUser.id);
.find()
。然后((结果)=>{
userLang=result.get('lang');
})
如果(orderState==未定义的| |['Nonproved'、'approved'、'delivered'、'Cancelled')。索引(orderState)<0){
响应。错误(“OrderState为null或不是['Nonproved'、'approved'、'delivered'、'Cancelled']!”;
}否则{
var query=newparse.query(Parse.Installation);
查询。包括(“用户”);
query.equalTo('user',request.object.get('user');
Parse.Push.send(
{
其中:查询,
数据:{
标题:“我的标题”,
警报:字幕信息
}
},
{
成功:函数(){
},
错误:函数(错误){
响应。错误(error)
},
useMasterKey:对
}
);
回答:success();
}
});
验证您是否确实拥有来自request.object.get(“用户”)的用户对象外壳如果您这样做,您可以调用currentUser.fetch()
,而不是执行查询,除非您可能需要包含其他对象
因为使用了查询,所以即使只返回一个对象(或者没有,它只是[]
),结果也是一个数组。所以,您正在执行的是Array.get(“lang”)
,它不应该做任何事情。尝试if(results&&results.length>0)user=results[0]
,那么您应该能够访问user.get(“lang”)代码>
您应该为您的用户类设置ACL/CLP。理想情况下,非用户或非主人的人不应访问这些文件。因此,如果设置正确,您的解决方案可能会将{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);
});
});
除了“它没用”之外,你能提供更多的细节吗?例如,是否记录了任何错误或意外行为?另外,看起来您正在承诺处理程序中分配userLang
,而没有在任何地方使用它。没有错误。当我登录userLang
时,它得到了undefined
。我想根据每个用户的首选语言向用户发送推送通知。所以我想从Parse中获取lang
,我确信我只能从request.object.get(“user”)中访问用户Id代码>如下所示:{“objectId”:“xxxxxxxxx”}
。所以我执行了新的查询来访问用户的lang
或username
:var userQuery=newparse.query(Parse.user);userQuery.equalTo('objectId',currentUser.id)
只返回一个对象。我认为它应该是user.get('lang')
而不是result.get('lang')
。我说的对吗?我试过你的代码,但没有成功。它返回null
@PirateofMarmara什么是null
?如果userLang
为null
,则表示用户对象已将lang
设置为null
userLang
为null
且用户对象未将lang
设置为null
。编辑的用户对象。是否为user
null?我相信,如果用户不存在,Fetch将返回undefined。因此,如果实际上没有一个用户具有该对象id,或者如果该对象上的user
实际上不是用户指针,则用户将是未定义的。
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);
});
});