HTTP请求:PUT 401(未经授权)

时间:2016-07-23 15:06:57

标签: angularjs firebase firebase-realtime-database

我开始学习如何在我的应用中使用firebase。我按照angular网站上的说明进行操作,并在index.html中设置代码片段,如:

<!-- The codes to add firebase -->
  <script src="https://www.gstatic.com/firebasejs/3.2.0/firebase.js"></script>
  <!-- The core firebase client (required) -->
  <script src="https://www.gstatic.com/firebasejs/3.1.0/firebase-app.js"></script>
  <!-- firebase-auth - Firebase Authentication (optional) -->
  <script src="https://www.gstatic.com/firebasejs/3.1.0/firebase-auth.js"></script>
  <!-- firebase-database - The Firebase Realtime Database (optional) -->
  <script src="https://www.gstatic.com/firebasejs/3.1.0/firebase-database.js"></script>

  <script>
    var config = {
      apiKey: ...,
      authDomain: ...,
      databaseURL: "https://...",
      storageBucket: "...",
    };
    firebase.initializeApp(config);
  </script>

然后我尝试使用HTTP请求来输出数据:

submitForm(personalInfo: PersonalInfo, educationsInfo: Education[], experiencesInfo: Experience[]): Observable<string>{
    let body = JSON.stringify({personalInfo, educationsInfo, experiencesInfo});
    let headers = new Headers({'Content-Type': 'application/json' });
    let options = new RequestOptions({ headers: headers});
    console.log(body);
    let url = this.firebaseUrl + 'apply-form.json';
    return this.http.put(url, body)
                    .map((response) => {
                        return response;
                    })
                    .catch(this.handleError);
}

但是,我收到以下错误:

PUT https://XXX.firebaseio.com/apply-form.json 401 (Unauthorized)

我不知道问题所在。我是使用firebase的新手,真的需要有人来帮助我。谢谢!

1 个答案:

答案 0 :(得分:1)

默认情况下,您的Firebase数据库只能由经过身份验证的用户编写。请参阅saving data to the database页面上第一个蓝色框中的警告。

要解决此问题,您当然可以configure the security rules of your database to allow public access。但是,虽然在开发过程中这通常很好,但是当你准备好将你的应用程序发布给除你自己之外的其他人时,这是一个坏主意。

安全发布数据的正确方法是要求用户sign in with Firebase Authentication,然后使用该信息确保他们只能访问他们授权的数据。通过使用HTTP访问Firebase数据库,您已经使自己变得比需要的更难。我建议对authentication使用Firebase JavaScript SDK并访问database