使用Parse SDK的匿名用户

时间:2013-09-29 05:48:51

标签: javascript parse-platform

我知道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员工给我的替代解决方案还是不必要?

2 个答案:

答案 0 :(得分:1)

你可以生成一个'随机'或'guid',然后将其插入到User.username中,密码为& email undefined ...在该用户的插入中,你有一个有效的Parse.User对象是匿名的。 User.insert()的返回是“令牌”,它永不过期。您可以使用cookie来存储{“token”:val,“username”:val}。

如果没有passwd,你永远不会登录用户,并且总是被迫调用cloudcode,你可以传入用户的令牌(-H“X-Parse-Session-Token:rcid ...”)代替使用'login'建立的验证会话。

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

答案 1 :(得分:0)

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

您可以在没有用户会话的情况下创建,保存,编辑和删除对象的原因是因为您可以创建任何人都可以使用的对象; I.E,“公共物品”。您也可以在这些对象上设置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任何人,除非我使用万能钥匙并且必须在云代码中进行。

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