如果我使用Firebase用户UID作为QR代码标签,这是一种明智的方法吗?
如果公众知道UID会有什么后果?
这会让黑客有机会修改用户隐私数据吗?
我们是否可以使用Firestore数据授予或限制对Firebase Cloud Storage上托管的文件的访问权限?
我希望用作Firebase安全规则的例子
allow write: if get(/databases/mydbname/documents/guilds/$(guildID)).data.users[(request.auth.uid)] in ["Admin", "Member"];
Run Code Online (Sandbox Code Playgroud) firebase firebase-security firebase-storage google-cloud-firestore
可以说我有两种对象用户和帐户.用户可以拥有多个帐户并与其他用户共享.因此Account1可能对User1和User2可用.虽然AccountB仅适用于User1.所以User1有两个帐户,User2有一个帐户.
什么是"firebase"构建方式?
我最初认为用户可以分别存储他们所属的帐户数组.
users: {
1: {
name: 'Ted',
accounts: [1, 2]
}
2: {
name: 'Frank',
accounts: [1]
}
}
accounts: {
1: {
name: "Checking"
},
2: {
name: "Savings"
}
}
Run Code Online (Sandbox Code Playgroud)
或者帐户将有一组用户.
users: {
1: {
name: 'Ted'
}
2: {
name: 'Frank'
}
}
accounts: {
1: {
name: "Checking",
users: [1, 2]
},
2: {
name: "Savings"
users: [1]
}
}
Run Code Online (Sandbox Code Playgroud)
我想知道哪种方式让我能够轻松找到用户的帐户,这样当Ted登录时我可以列出他所属的帐户而无需拉下整个数据库.为了安全起见,我不希望他的机器上的所有数据.
问题#1安全规则会解决这个问题吗?我的意思是我打算设置我的安全规则,以便用户只能拥有他们所属的帐户.我希望,如果我查询"/ accounts",我将只返回用户可以访问的那些帐户...不是吗?
问题#2是否有查询项目列表的机制.像"/ accounts/[1,2]",以便我收回帐户"/ accounts/1"和"/ accounts/2"?
感谢您分享的任何信息.
我正在使用Firebase开发多人游戏.每场比赛后,玩家得分记录在火力基础中,并且玩家总得分字段也会使用新总数进行更新.我的问题:是否有可能使用firebase安全规则来保护playerTotalScore字段免受用户的任意操纵?如果是这样,怎么样?
我已详细阅读了firebase网站上的firebase安全信息.虽然我理解可以在安全规则中实现一些复杂的逻辑(按照给定的数量增加一个数字,例如这个要点,或者只使用字段插入(".write": "!data.exists()"),但在这种情况下,没有任何信息似乎有帮助. - 仅仅规则是不够的,因为分数可以通过多次递增来操纵.仅插入似乎是totalScore的一个选项,因为它在每次游戏后更新.
根据加藤的要求,这是具体的用例.
我正在开发的游戏是一个问答游戏,其中玩家回答问题,并且玩家得分实时显示.
在游戏过程中,通过以下声明在每个问题之后更新该特定游戏的得分:
gameRef.child('players').child(UserId).child('score').set(gameScore)
Run Code Online (Sandbox Code Playgroud)
游戏结束后,totalScore=totalScore+gameScore玩家的总分数(所有游戏玩法)计算为,然后使用以下语句在Firebase中更新玩家总分:
leaderboardRef.child(userId).setWithPriority({userName:userName, totalScore:totalScore}, totalScore)
Run Code Online (Sandbox Code Playgroud)
这是我目前具体的具体结构.这不是一成不变的,所以我愿意根据建议的方法来保护数据,无论如何需要更改它.
用户(玩家)所玩的每个游戏的得分存储在以下结构中
<firebase_root>/app/games/<gameId>/players/<userId>/score/
Run Code Online (Sandbox Code Playgroud)
<gameId>是firebase生成的密钥,作为调用firebase push()方法的结果.
<UserId>是firebase simplelogin uid.
每个用户(玩家)的总分数(所有游戏的所有分数的总和)存储在以下数据结构中
<firebase_root>/app/leaderboard/<userId>/totalScore/
Run Code Online (Sandbox Code Playgroud)
出于查询目的,总分数的排行榜数据使用totalScore作为优先级进行设置
leaderboardRef.child(userId).setWithPriority({userName:userName, totalScore:totalScore}, totalScore)
Run Code Online (Sandbox Code Playgroud)
得分和总分数都是数字整数值.这就是我能想到的当前数据结构的所有细节.
我试图理解但是无法看到登录后我存储的数据的方式和位置.
public static final String BASE_URL = "https://xyz.firebaseio.com";
Firebase ref = new Firebase(FirebaseUtils.BASE_URL);
ref.authWithPassword("xyz@foo.com", "some_password", new Firebase.AuthResultHandler() {
@Override
public void onAuthenticated(AuthData authData) {
Toast.makeText(LoginActivity.this, "Login Successful", Toast.LENGTH_SHORT).show();
startActivity(new Intent(LoginActivity.this, MainActivity.class));
}
@Override
public void onAuthenticationError(FirebaseError firebaseError) {
}
}
Run Code Online (Sandbox Code Playgroud)
此时,我已成功通过身份验证并登陆MainActivity.接下来onCreate的MainActivity.我初始化了Firebase
firebase = new Firebase(FirebaseUtils.BASE_URL).child("box");
// adapter below is an ArrayAdapter feeding ListView
firebase.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
if (dataSnapshot.getValue(Box.class) instanceof Box)
adapter.add(dataSnapshot.getValue(Box.class).getName());
}
@Override
public void …Run Code Online (Sandbox Code Playgroud) 在Firebase 2中,用户可以创建自定义令牌并指定调试标志,这反过来会返回大量有关权限的调试信息.在Firebase 3中,它似乎已被删除.
有没有办法,也许通过REST API获取此权限调试数据回到web(javascript)?尝试通过模拟器有时调试超过1k行的权限文件是不可行的.
我们可以与服务帐户共享 BigQuery 数据集,我们可以通过为服务帐户分配特定角色来将服务帐户作为成员添加到特定存储桶......使用图形界面。
火力商店怎么样?我们可以与服务帐户共享特定的集合吗?我在网络界面中找不到任何这样的选项..
备注:我无权向服务帐户授予全局权限,但我有权向资源添加成员并授予他们对该特定资源的角色。
谢谢你!
service-accounts firebase-security google-iam google-cloud-firestore
在我的应用程序中,我有许多不同的用户组,例如聊天室和特定项目.
如何允许这些组中的用户共享其状态数据,并查看该组中每个其他用户的存在,但是将该数据保持为外部世界的私密性?
我在文档中找不到答案.默认的Firebase规则是:
{
"rules": {
".read": "auth != null",
".write": "auth != null"
}
}
Run Code Online (Sandbox Code Playgroud)
我编辑了我看起来像这样并保存了它们:
{
"rules": {
"users":{
".read": true,
".write": "auth != null"
},
".read": "auth != null",
".write": "auth != null"
}
}
Run Code Online (Sandbox Code Playgroud)
如果没有我做任何事情,他们会在看似12小时后随机重置旧规则.我在这里错过了一些坚持选择吗?