我正在建立一个简单的游戏,将Angular JS和Parse.com云作为我的数据库。
我的目标是在游戏和游戏中,将用户分数存储在Parse云中。
但是,如果有人可以访问我的Parse密钥,那么我怎么能这样做呢,因为它们在我的js文件中可见,只是用一些假数据重新创建Parse对象,然后将它存储在我的数据库中?
ACL在这种特殊情况下不是重点 - 现在我只是在保存之前转向写入acl,以防止用户在保存之前更改它们的分数。
在我的游戏中,我没有任何Parse用户 - 我希望所有人都可以在没有登录的情况下玩我的游戏。
您如何看待在这篇文章的第一个回答中使用'fake'用户的想法(因为匿名匿名无法在JS解析SDK中创建),然后跟踪会话和用户?
在我的情况下它是否有帮助?
也许我应该在Cloude Code中进行一些检查 - 比如在保存Parse之前比较Cookie或本地存储数据(它会让游戏中的作弊更难但仍然可能)?
下面我将展示我的全部服务,向您展示所有内容:
angular.module('Parsedb', [])
.provider('Parsedbmanager', function() {
this.$get = function($q, $http) {
// new Parse constructor
var ParseHighScore = Parse.Object.extend('ParseHighScore');
// create new obj
var parseHighScore = new ParseHighScore();
this.parseInit = function() {
Parse.initialize('myKey', 'myKey');
};
this.setParsedb = function(newScore) {
// set val
parseHighScore.set('HighScore', newScore);
// save score to cloud
parseHighScore.save(null, {
success: function (parseHighScore) {
// protect from change saved obj
var acl = new Parse.ACL();
acl.setPublicReadAccess(true);
acl.setPublicWriteAccess(false);
parseHighScore.setACL(acl);
return parseHighScore.save();
},
error: function (parseHighScore, error) {
console.log('Failed to create new object, with error code: ' + error.message);
}
});
};
this.getParsedb = function() {
// need q to get this asynch
var deferred = $q.defer();
var query = new Parse.Query(ParseHighScore);
query.limit(5);
query.descending("HighScore");
query.find({
success: function(results) {
console.log("Successfully retrieved " + results.length + " scores.");
// resolve, if you have results
deferred.resolve(results);
},
error: function(error) {
deferred.reject(error.message);
}
});
return deferred.promise;
};
return this;
};
});
答案 0 :(得分:0)
如果你让用户写入db,那么总会有用户可以改变数据的情况..我认为你所能做的就是从用户那里抽象出来