我想用AngularJS和Firebase创建一个web应用程序,但只有应用程序的某些部分需要Firebase提供的3向绑定。其他部分只需找到与当前数据的绑定一次,而无需不断更新。换句话说,一个普通的RESTneneneba API就足够了。
Thinkster AngularJS-Firebase教程展示了如何使用$resource
访问这个Firebase REST API。这种方法不需要打开与Firebase的并发连接,只获取当前数据而不更新:
app.factory('Post', function ($resource) {
return $resource('https://FIREBASE-URL.firebaseIO.com/posts/:id.json');
});
是否可以在使用简单登录服务登录Firebase后执行此类请求,但不需要保持Firebase连接打开。例如:
//Does this already open a connection to FireBase?
var ref = new Firebase('https://FIREBASE-URL.firebaseIO.com');
//Login to FireBase
ref.authWithPassword({
email : "bobtony@firebase.com",
password : "correcthorsebatterystaple"
}, function(error, authData) {
if (error === null) {
// Can we close the connection now while still leaving the user authenticated?
Firebase.goOffline();
} else {
console.log("Error authenticating user:", error);
}
});
如果我现在就向REST API发出请求:
- Firebase会识别
auth
变量吗 - 授权有效吗
- 我可以使用此方法来阻止连接保持打开,并将Firebase用作普通的REST API吗
让事情更清楚一点:
- 我不需要实时后端,一个简单的REST后端就足够了
- 我想使用Firebase,因为它提供了简单的身份验证方法
- 如果可能的话,我想避免使用Firebase SDK,只使用REST API与我的Firebase交互
换句话说,我的问题是:
在使用Firebase作为REST API而不使用SDK的情况下,是否可以验证用户客户端使用Firebase的安全规则?
这是一个极不成熟的优化案例,而且弊大于利。
同时使用REST API和SDK没有任何好处。如果您已经下载了SDK,并且已经建立了套接字连接,那么重用现有连接将更高效、更便宜、更不复杂。SDK也在REST API上进行了大量优化,在处理临时断开连接和网络错误方面做得更好。通过使用REST API,您将使您的生活变得更加困难,从而实现零收益。
如果你的目标是在不监听更新的情况下下载一次数据,只需使用一次就可以了。
app.controller('ctrl', function($scope) {
var ref = new Firebase('https://FIREBASE-URL.firebaseIO.com');
ref.once('value', function(snap) {
$scope.data = snap.val();
$scope.apply();
});
});
创建ref()不会立即创建连接。第一次进行身份验证、写入或读取数据时,将建立连接。
通过SDK进行身份验证对REST查询没有任何帮助。您需要将?auth=TOKEN
传递到URL中,其中TOKEN是手动创建的身份验证令牌(根本不连接到SDK简单登录身份验证事件)。
如果你不想要实时功能,就不要使用SDK。只需使用$http或$resource并通过.json URL进行连接。