2016-01-22 47 views
0

我试图从运行在Heroku上的node.js应用程序更新我的Parse数据库中的PFUser。我从iOS应用程序调用Parse云功能。UserCannotBeAlteredWithoutSessionError当从Heroku node.js解析更新PFUser应用程序

下面是我用它来更新分析用户代码的一部分,以及创造对条纹的用户(条形部分工作正常):

Parse.Cloud.define("createCustomerWithCreditCardToken", function(request, response) { 
    var userId = request.user.id; 
    var sourceId = request.params.creditCardToken; 
    var customerId; 
    var userSessionToken = request.user.getSessionToken(); 
    console.log('userId: ' + userId + ' source: ' + sourceId + ' userSessionToken: ' + userSessionToken); 
    stripe.customers.create({ 
    source: sourceId, 
    description: userId 
    }, function(error, customer) { 
    if (error !== null) { 
     response.error('error creating customer: ' + error); 
    }else { 
     var userQuery = new Parse.Query('User'); 
     userQuery.equalTo('objectId', userId); 
     userQuery.first({sessionToken: userSessionToken}).then(function(user) { 
     console.log('user from parse query: ' + user.get("username")); 
     user.set("stripeCustomerId", customer.id); 
     user.save(null, { 
      success: function(parseCustomer) { 
      console.log('customer saved to parse: ' + parseCustomer); 
      }, 
      error: function(error, parseCustomer) { 
      console.log('customer save failed: ' + JSON.stringify(error, null, 2) + ' with error: ' + JSON.stringify(parseCustomer,null, 2)); 
      } 
     }); 
     }); 
     customerId = customer.id; 
     console.log('customerId: '+ customerId); 
     // response.success(customer); 
     response.success('Customer: ' + JSON.stringify(customer, null, 2) + 'error: ' + error); 
    } 
    }); 
}); 

我碰到下面的错误日志输出,当我运行此: error log output

error: { "code": 206, "message": "Parse::UserCannotBeAlteredWithoutSessionError" } 

在这种post在node.js的应用程序上下文的当前用户的概念是由一个Parse工程师讨论。

此外,在云代码,返回当前 用户的方法的概念是有意义的,因为它在JavaScript并在网页上,因为 只有一个活动的请求,只有一个用户。但是,在像node.js这样的 上下文中,不能有全局当前用户,其中 需要显式传递会话令牌。

本质,他建议要做到这一点:

Parse.Cloud.define('findBacon', function(req, res) { 
var token = req.user.getSessionToken(); 
var query = new Parse.Query('Bacon'); 
// Pass the session token to the query 
query.find({ sessionToken: token }).then(...); 
}); 

我也用{useMasterKey:true}代替{sessionToken:userSessionToken}产生同样的错误尝试。

我可能会错过一些明显的细节,但我似乎无法找到它。任何关于如何解决这个问题的想法都非常感谢。

回答

0

原来有处理凭据第三种方式:

Parse.Cloud.useMasterKey(); 

我放在这条线在整个方法的开始,但这对我来说。但我不确定将这些凭据授予整个功能的含义。

我不确定何时使用其他选项。

如果有人遇到此问题并希望详细说明,我会很乐意为正确答案提供何时授予哪些凭据的良好解释。