在我们的应用程序中,我们使用Firebase的自定义登录功能在用户的验证令牌中存储一些元数据。内部验证()似乎遵守外部验证()规则
稍后我们将此令牌发送到我们的Web应用程序之一,以代表用户使用新的令牌执行任务以禁用安全规则。这个想法是,一个特定的位置不能被直接由认证用户写入,但是在完成一些服务器端计算和验证之后,可以在该位置写入数据。
这里是我想要做的一个示例代码:
var testRef = new Firebase(firebaseApp + 'test');
testRef.auth(userFirebaseAuthToken, function(error, result) {
if (!error) {
var userId = result.auth.userId;
// perform validations and calculations
var tokenGenerator = new FirebaseTokenGenerator(firebaseSecret);
var token = tokenGenerator.createToken({admin: true});
var protectedRef = new Firebase(firebaseApp + '/protected/');
protectedRef.auth(token, function(error) {
if (!error) {
protectedRef.child('foo').push({id: userId});
}
});
}
});
但我得到这个错误:
FIREBASE WARNING: set at /protected/foo/-Ityb1F6_G9ZrGCvMtX- failed: permission_denied
当期望的行为是能够在写使用令牌的位置使用admin令牌。
我知道这可能不是Firebase问题,但是一些JavaScript好/坏的部分,但我需要做的是代表用户写一些受保护的位置,即使它没有被授权写入该位置,但需要进行身份验证。
这是正确的,Firebase连接受域限制。第一次验证时,对该域的所有后续引用都会继承该状态,直到您调用unauth为止。同样,如果您使用不同域调用“新Firebase()”两次,那些引用将是独立的,不会共享认证状态。 – Anant 2013-05-07 18:16:31