2016-01-22 27 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(); 

我放在這條線在整個方法的開始,但這對我來說。但我不確定將這些憑據授予整個功能的含義。

我不確定何時使用其他選項。

如果有人遇到此問題並希望詳細說明,我會很樂意爲正確答案提供何時授予哪些憑據的良好解釋。