调用Firebase Firestore Rest API时出现错误403



下面是我如何生成用于调用API的accessToken的代码。

import firebaseConfig from './../firebaseConfig';
import firebase from "firebase/app";
import "firebase/auth";
firebase.initializeApp(firebaseConfig);
var provider = new firebase.auth.GoogleAuthProvider();
firebase.auth().signInWithPopup(provider).then(function(result) {
var token = result.credential.accessToken;
sessionStorage.setItem("__token", token);    // Token saved
}.bind(this)).catch(function(error) {
});

使用该代码,我将在sessionStorage中获取令牌。下面是我如何使用firebase Rest API的片段。

var URL = https://firestore.googleapis.com/v1/projects/qtbt-a8bf8/databases/(default)/documents/users/[USER_ID]?key=[YOUR_API_KEY]
var token = sessionStorage.getItem("__token");
const config = {
headers: { Authorization: `Bearer ${token}` , Accept: 'application/json'}
};
axios.get(URL, config)
.then(function (response) {
// handle success
console.log(response);
})
.catch(function (error) {
// handle error
console.log(error);
})
.finally(function () {
// always executed
});

在axios调用中,我得到错误403。响应:

code: 403
message: "Request had insufficient authentication scopes."
status: "PERMISSION_DENIED"

您在调用中缺少api键。apikey和token都应该在标头中。

var token = sessionStorage.getItem("__token");// verify your token is correct. 
var headers = {'x-api-key' : 'key valu goes here', 'authorization': ${token} }

使用IdToken而不是OAuth令牌时,安全规则略有不同。

代替使用:

如果request.auth.uid==resource.id;

我使用:

如果request.auth.token.email==resource.id;

我正在将令牌的所有者电子邮件与文档id进行匹配,文档id恰好也是所有者的电子邮件。

您还可以使用以下内容访问用户的子文档:

request.auth.token.email==resource.data.ownerEa;

在这种情况下,要匹配的文档必须具有值为==用户电子邮件的属性ownerEa。

非常烦人的文档,不是吗?

希望能有所帮助。。。

相关内容

  • 没有找到相关文章

最新更新