2013-09-29 101 views
2

我知道Parse.com不支持JavaScript SDK的匿名用戶,這正是我現在使用的。我已經向Parse員工詢問了那些使用Parse Javascript SDK並希望爲Parse ios SDK提供匿名用戶功能的用戶的替代選擇。 Parse員工告訴我:「這還沒有得到官方支持,但是你可以通過生成一個隨機的用戶名和密碼存儲在本地用戶的localStorage中來實現類似的功能」。現在,現在,下面的代碼可以讓我將信息保存到我的解析數據庫解析SDK的匿名用戶

var MYObject = Parse.Object.extend("MYObject");  
var myObject = new MYObject(); 
var SomeStuff = "Test"; 

myObject.set("RECORD",SomeStuff); 
myObject.save(null, { success: function(myObject) 
{ //alert alert('New object created with objectId: ' + myObject.id); } 

這將創建一個新的類,然後將「記錄」和「測試」。有用。然而,這完全不需要用戶名或密碼就可以保存。我想知道爲什麼只是允許用戶保存這樣的數據不足以代替Parse提供的匿名用戶功能,或者在我的情況下,爲匿名用戶功能提供了另一種解決方案,因爲匿名用戶不受解析Javascript支持這是我正在使用的SDK。匿名用戶功能首先提供安全性的原因是什麼?我應該採用Parse員工給我的替代解決方案嗎?還是沒有必要?

回答

1

你可以直接生成一個'隨機'或'guid',然後將其插入User.username,密碼爲& email undefined ...在插入該用戶時,您有一個有效的Parse.User對象匿名。 User.insert()返回的是'token',它永遠不會過期。您可以使用cookie來存儲{「token」:val,「username」:val}。

沒有passwd,你永遠不會登錄用戶,並且總是被迫調用cloudcode,你可以在其中傳遞用戶令牌(-H「X-Parse-Session-Token:rcid ...」)到位使用'login'建立的經過驗證的會話。

我已經在REST API中使用了這種技術,我想讓用戶無需輸入任何文本字段。他們沒有提供任何信息,只同意使用匿名雲賬戶。

+0

謝謝你的回答。我想知道爲什麼我不得不求助於這樣的解決方案,雖然數據已經可以保存和檢索,而無需輸入用戶名或密碼。 – Brandon

0

我知道這個答案非常晚,但它是相關的,因爲沒有任何變化。 Parse JS SDK中沒有匿名用戶類。

您可以在沒有用戶會話的情況下創建,保存,編輯和刪除對象的原因是您可以創建任何人都可以使用的對象; I.E,「公共對象」。您也可以在這些對象上設置ACL憑證,但不會將新的objectsIds與userObjectIds關聯,因此只能使用您的應用程序MasterKey更新Cloud代碼中的所有對象。

var Foo = Parse.Object.extend("Foo"); 
var foo = new Foo(); 

foo.set("message", "Hello Foo"); 
foo.save().then(function(foo){ 
    //foo was saved 
    //anyone can edit it right now 
    //make it disappear into a black hole 
    //in other words, nobody can edit without Master Key 
    var acl = new Parse.ACL(); 
    acl.setPublicReadAccess(false); //nobody can read it 
    acl.setPublicWriteAccess(false);//nobody can write it 
    foo.setACL(acl); 
    return foo.save(); 
}).then(function(foo){ 
    //since foo was returned, we can still read it, but 
    //we cannot edit it anymore... 
    foo.set("message", "cannot update without Master Key"); 
    return foo.save(); 
}).then(function(foo){ 
    //this will not run 
}, function(error){ 
    //catch error for cannot update foo 
    log(error); 
}); 

在這個例子中,我從創建Foo對象開始。然後我更新消息欄並保存。保存的對象被返回,我創建一個ACL,防止任何人讀取和寫入Foo。然後我設置Foos ACL並再次保存。保存的對象返回,我嘗試再次更新消息列。這一次發生錯誤,錯誤回調會記錄錯誤。發生這種情況是因爲我無法更新任何人,除非我使用主密鑰並且必須在Cloud Code中進行。

Parse.Cloud.useMasterKey(); 
foo.save().then.... //after second return of foo.save() above