2

我知道 Parse.com 不支持我现在使用的 Javascript SDK 的匿名用户。我已经问过 Parse 的工作人员,对于那些使用 Parse Javascript SDK 并希望拥有类似为 Parse ios SDK 提供的匿名用户功能的人来说,有什么替代方案。Parse 的工作人员告诉我:“这还没有得到官方的支持,但是你可以通过生成一个随机的用户名和密码来实现类似的东西,这个用户名和密码存储在这个用户的 localStorage 中”。现在,现在,下面的代码允许我将信息保存到我的 Parse 数据库

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); } 

这将创建一个新类,然后添加“RECORD”和“Test”。有用。然而,这完全不需要用户名或密码即可保存。我想知道为什么只允许用户保存这样的数据是不够的,而不是使用 Parse 提供的匿名用户功能,或者在我的情况下,因为 Parse Javascript 不支持匿名用户,所以匿名用户功能的替代解决方案我正在使用的 SDK。首先提供匿名用户功能的原因是安全问题吗?我应该求助于 Parse 工作人员给我的替代解决方案还是没有必要?

4

2 回答 2

1

您可以只生成一个“随机”或“guid”,然后将其插入 User.username 且密码和电子邮件未定义...在插入该用户时,您有一个有效的 Parse.User 匿名对象。User.insert() 的返回是永不过期的“令牌”。您可以使用 cookie 来存储 {"token":val, "username":val}。

如果没有密码,您永远不会登录用户,并且将始终被迫调用 cloudcode,您可以在其中传递用户的令牌(-H“X-Parse-Session-Token:rcid...”)来代替经过验证的会话通过“登录”建立。

我在 REST API 中使用了这种技术,我想在没有任何文本字段输入的情况下加入用户。他们不提供任何信息,只同意使用匿名云帐户。

于 2013-09-29T19:10:18.943 回答
0

我知道这个答案很晚,但它是相关的,因为没有任何改变。Parse JS SDK 中没有匿名用户类。

您可以在没有用户会话的情况下创建、保存、编辑和删除对象的原因是因为您可以创建任何人都可以使用的对象;IE,“公共对象”。您也可以在这些对象上设置 ACL 凭据,但您不会将新的 objectsIds 与 userObjectIds 相关联,因此只能使用您的应用程序 MasterKey 更新 Cloud Code 中的所述对象。

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 并再次保存。返回保存的对象,我尝试再次更新消息列。这次发生错误,错误回调会记录错误。发生这种情况是因为我无法更新 foo 任何人,除非我使用主密钥并且必须在 Cloud Code 中进行。

Parse.Cloud.useMasterKey();
foo.save().then.... //after second return of foo.save() above
于 2015-05-30T16:46:17.993 回答