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

时间:2014-10-22 18:57:58

标签: angularjs firebase firebase-security firebasesimplelogin

我想使用AngularJS和Firebase创建一个网络应用,但只有部分应用需要Firebase提供的3向绑定。其他部分只能在当前数据中找到一次绑定,而不会不断更新它。换句话说,正常的REST API就足够了。

Thinkster AngularJS-Firebase tutorial显示了如何使用$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吗?
  4. 让事情变得更清楚:

    • 我不需要实时后端,简单的REST后端就足够了
    • 我想使用Firebase,因为它提供了简单的身份验证方法
    • 如果可能,我希望避免使用Firebase SDK并仅使用REST API与我的Firebase进行交互

    换句话说,我的问题是:

    是否可以在不使用SDK的情况下使用Firebase作为REST API来验证用户客户端是否使用Firebase的安全规则?

1 个答案:

答案 0 :(得分:1)

这是一个极度过早优化的案例,它也是有害的而不是有用的。

串联使用REST API和SDK没有任何优势。如果您已经下载了SDK并且已经建立了套接字连接,那么重用现有连接会更高效,更便宜,也更简单。 SDK还针对REST API进行了大量优化,并且更好地处理了临时断开连接和网络错误。通过使用REST API,您实际上将使您的生活更加难以获得零收益。

如果您的目标是在不收听更新的情况下完全下载数据一次,只需使用once代替。

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连接。