javascript - 使用 axios 进行 Firebase OAuth 登录和数据访问

标签 javascript oauth firebase-realtime-database firebase-authentication axios

我对 Axios 很陌生,对 OAuth 和 Firebase 也很陌生,所以我确定我错过了一些愚蠢的东西......

我正在尝试使用 firebase 的身份验证提供程序功能创建登录,然后使用 Axios 在我的数据库中创建用户配置文件。 (我必须根据我收到的数据进行大量其他 API 调用,并且只使用 Axios 来处理所有事情会非常方便。)

这是我到目前为止所拥有的。

  authenticate() {
    var provider = new firebase.auth.GithubAuthProvider();
    console.log(provider);
    firebase.auth().signInWithPopup(provider)
      .then((res) => {
        console.log(res);
        if (res.credential) {
          var token = res.credential.accessToken;
        }
        const user = axios.create({
          baseURL: fbaseUrl,
          withCredentials: true, // newly added
          headers: {
            Authorization: `Bearer ${token}`, // cf firebase docs https://firebase.google.com/docs/reference/rest/database/user-auth
          }
        });
        this.setState({uid: res.user.uid, useraxios: user, token: token});
      }).catch((err) => {
        console.log(err.message);
      }); 
  }

  testPost() {
    this.state.useraxios.post(`/users.json`, { id: this.state.uid, joinedOn: moment() })
      .then((res) => console.log(res))
      .catch((err) => console.log(err.message));  /// this errors out
  }

我目前遇到的错误是没有“Access-Control-Allow-Credentials” header ,因此不允许访问 localhost,我认为这是 Firebase 规则中我必须解决的问题。在我添加 withCredentials: true 之前行,我刚刚收到“不允许访问”的响应。

我也试过
    const user = axios.create({
      baseURL: `${fbaseUrl}/users/${res.user.uid}.json?auth=${token}`
    });


      firebase.auth().currentUser.getToken(true).then((token) => {
       const user = axios.create({
          baseURL: `${fbaseUrl}/users/${res.user.uid}.json?auth=${token}`
        });


      firebase.auth().currentUser.getToken(true).then((token) => {
       const user = axios.create({
          baseURL: `${fbaseUrl}`,
          headers: {Authorization: token}
        });

根据 this stackoverflow question返回 401 Unauthorized 错误。

当我将 read & write 都设置为 true 时,发布到数据库完全没问题,所以我如何格式化 URL 或其他东西不是问题。

我假设有几个问题,一个是我的 axios.create config 和另一个使用我的 Firebase 规则,但我已经阅读了两者的文档,但仍然非常茫然。这是一个 react 应用程序,但我 98% 确定 react 的东西不是问题。

我至少在正确的轨道上吗? (尝试将 axios 用于更适合 firebase 的内置方法的东西,我是不是傻瓜......?)任何帮助将不胜感激。

最佳答案

它与您的功能配置有关。您需要将其添加到您的 firebase 函数/index.js 中,并使用 cors 配置您的函数。

const cors = require('cors')({origin: true});
更多详情请引用这个网址:Enabling CORS in Cloud Functions for Firebase

关于javascript - 使用 axios 进行 Firebase OAuth 登录和数据访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41627854/

相关文章:

javascript - 如何创建一个小书签以在单独的窗口中显示数据层中的对象

javascript - Electron 无法获取当前文件路径

c# - asp.net MVC 4 外部登录提供程序 - 'No OpenID endpoint found' (google)

azure - SAML2.0认证后调用Graph api。如何获取所需的身份验证 token

javascript - 如何在 jQuery Mobile 中检测设备的互联网连接

javascript - 带有第一个 div 的 jQuery 自定义 Accordion 在初始加载时打开 - 修改箭头图像的问题

Flutter 和 Supabase - OAuth 深层链接不起作用

java - 为什么条目在 Firebase 数据库中不断循环?

firebase-realtime-database - 使用flutter如何在同一个App中使用多个firebase实时数据库

java - 在 ListView 中无法获取正确的数据