2015-04-07 120 views
3

我正在使用雲功能來獲取用戶的sessionToken。該文件說,這個方法只有在用主鍵獲取用戶對象時才返回正確的值。但是,即使我使用主密鑰,我仍然會得到未定義的結果。我的代碼有什麼問題?解析 - 爲什麼user.getSessionToken()返回undefined

Parse.Cloud.define("hello", function(request, response) { 
    Parse.Cloud.useMasterKey(); 
    Parse.Promise.as().then(function(){ 
     var query = new Parse.Query(Parse.User); 
     return query.first({useMasterKey:true}); 
    }).then(function(user){ 
     return user.fetch({useMasterKey:true}); 
    }).then(function(user){ 
     response.success(user.getSessionToken()); 
    }); 
}); 
+1

您的用戶是否有'useMasterKey'鍵?從用戶的角度來看,您的實際目標是什麼(誰使用這種雲功能以及用於什麼)? – Wain

回答

6

這將無法正常工作,因爲用戶通過雲代碼獲取他時未登錄。爲了getSessionToken的工作,你需要已經有一個登錄用戶。因爲,否則CloudCode會如何知道您想要獲得哪個用戶會話? (如果他登錄了多個設備)另外你的代碼正在返回數據庫中的第一個用戶,這真的是你想要的嗎?

無論哪種方式,您都需要通過雲代碼登錄用戶,然後返回會話令牌。然而,我沒有密碼(在調用user.logIn()時遇到了一些麻煩),它應該工作,所以試試看),所以我找到的唯一解決方案是更改用戶的密碼,然後登錄。你需要獲取用戶的會話令牌嗎?如果您不介意更改用戶的密碼,您可以執行如下操作:

var password; //create new random passowrd 
query.first({useMasterKey: true}).then(function(user){ 
    user.set("password", password); 
    return user.save(); 
}).then(function(user){ 
    return Parse.User.logIn(user.get("username"), password); 
}).then(function(user){ 
    return user.getSessionToken(); 
}); 
+0

問題中的代碼只是一個演示。我的目標是進行第三方登錄,在這種情況下密碼是隨機生成的。根據文檔,如果我使用主密鑰獲取用戶,即使用戶沒有登錄,getSessionToken()也應該可以工作。我想我可能會觸發一個解析錯誤。因爲在另一個應用程序它正常工作。 –

+0

是的,它曾經像那樣工作。但是,如果您將解析sdk升級到版本1.4,並添加Parse.Session,則停止爲我工作。我不知道它是否是一個錯誤。我還必須建立第三方登錄,如果你想在https://github.com/felix-dumit/PFUser-Digits查看js代碼。 –

+0

雖然這個解決方案看起來很詭異,但它的作用就像一個魅力。我在sdk 1.4.2上。 – Kartik