AngularFire简单登录(电子邮件/密码) - access-control-allow-origin / unknown错误

时间:2014-04-23 03:14:00

标签: angularjs firebase angularfire firebase-security

所以我试图在我的AngularJS应用程序中做一些似乎是最简单的SimpleLogin电子邮件/密码验证版本。我为我的应用程序设置了一个forge,我可以成功地读取和写入数据,并且我使用该引用进行身份验证。我在仪表板中启用了电子邮件/密码身份验证,并添加了一个我尝试进行身份验证的注册用户。我没有启用其他形式的身份验证。

注意:我在127.0.0.1:9000本地运行此代码,因此我不知道这是否与结果有关(希望不是,我不想要在实时服务器上构建它......)

无论如何,代码......

=====================================

这就是我认为的全部内容:

<button ng-click="dummySignin()">Dummy Signin</button>

这是我的角色代码:

angular.module('myApp')
  .controller('MainCtrl', function ($scope, $firebaseSimpleLogin) {
    var ref = new Firebase('https://dummyapp.firebaseio.com/myforge');
    $scope.auth = $firebaseSimpleLogin(ref);

    $scope.dummySignin = function() {
      console.log('signing in...');

      $scope.auth.$login('password', {
        email: 'guy@face.com',
        password: 'cookie'
      }).then(function(user) {
        console.log('user: ', user);
      }, function(error) {
        console.log('error: ', error);
      });
    };
  );
});

我知道Firebase参考设置正确,因为当我尝试随机电子邮件地址时,我收到了INVALID EMAIL错误。当我使用正确的电子邮件地址时,这是回来的JSON:

error: {
  code: "UNKNOWN_ERROR",
  data: {
    message: "FirebaseSimpleLogin: FirebaseSimpleLogin: An unknown error occurred."
  }
}

此外,我在我的控制台中收到此消息(作为错误,而不是通过console.log):

XMLHttpRequest cannot load https://auth.firebase.com/auth/firebase?email=guy%40face.com&password=cookie&firebase=127.0&v=1.3.1. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://127.0.0.1:9000' is therefore not allowed access.]

我的授权请求来源列表中有localhost127.0.0.1,但这不重要,因为(据我所知)只会影响OAuth登录方法像Facebook和Twitter。关于该错误的另一个奇怪的部分是查询字符串中的firebase变量看起来像是指向localhost(并且显然被截断了......),所以我不知道是什么他到底去了。

据我所知,我做的一切都是正确的,但我仍然不知道会导致什么问题。我错过了什么?

1 个答案:

答案 0 :(得分:3)

更新:

所以在将我的实际项目代码发送给Firebase的Rob之后,他用这个回击了我:

  

实例化Firebase简单登录客户端时,需要传递   在Firebase引用中(即new Firebase(...))而不是   角度服务或AngularFire对象。替换中的itemListService   new Firebase('https://myapp.firebaseio.com/')上面的对象   似乎正好解决了。

上面的示例代码并没有反映出这一点(导致问题的一件事当然),但假设我的服务被称为&#34; FirebaseService&#34;,我的实际代码来自:

$scope.auth = $firebaseSimpleLogin(FirebaseService);

到此:

var firebaseRef = new Firebase('http://myapp.firebasio.com');
$scope.auth = $firebaseSimpleLogin(firebaseRef);

所以现在不是使用我的服务来返回Firebase引用(我仍然使用它来读取和写入数据),而是将对Firebase的直接引用传递给$ scope.auth,然后我可以成功致电$login()

谢谢,Rob!