使用RESTapi进行身份验证的Firebase简单登录



我想用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发出请求:

  1. Firebase会识别auth变量吗
  2. 授权有效吗
  3. 我可以使用此方法来阻止连接保持打开,并将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进行连接。

最新更新