gpt4 book ai didi

javascript - 尝试在 Firebase 身份验证列表中添加 FB 用户时出现 "Error: Invalid IdP response/credential"

转载 作者:行者123 更新时间:2023-12-03 08:50:12 27 4
gpt4 key购买 nike

我一直致力于在基于 Expo 的应用程序中实现 Facebook 和 Google 登录方法。

将 Firebase 与我的应用连接后,我希望该用户列在 Firebase 用户中。虽然 Google 登录似乎工作正常,但 Facebook 给出了如下错误,来自 firebase.auth().signInWithCredential(credential):

[Error: Invalid IdP response/credential: http://localhost?id_token=EAAGUBzIZAgb0BABAkdrj5NcUcvljcsLeNBQlV5VUZAZC7M8e7sSRg2MkqlFCuD7tKjin4uZBep5gSs20oAo8fXKiUqq2deEbUl6HoaAUskTda7x49VCqqcbYh1W3566fMZBtRFB5S3fRV7D41AGVGPMAck91l1KiFCzQzCGtSf5g6ZBKoyHw03LOVONcOiwVZB4vXVcGPYmIzL3RuzzztdBNLRql5ndSk0ZD&providerId=facebook.com] 

这是代码的相关部分:

  1. Firebase.js
// imports, configs and exports omitted
export const facebookProvider = new firebase.auth.FacebookAuthProvider;
  • LoadingScreen.js(登录部分)
  • import firebase, { googleProvider, facebookProvider } from "../firebase";
    import * as Facebook from "expo-facebook";

    const LoadingScreen = ({ navigation }) => {
    const signInWithFacebook = async () => {
    try {
    await Facebook.initializeAsync("444233602924989");
    const { type, token } = await Facebook.logInWithReadPermissionsAsync(
    "444233602924989",
    {
    permissions: ["public_profile", "email"]
    }
    );
    if (type === "success") {
    const credential = facebookProvider.credential(token);
    onSignInFB(credential);
    } else {
    Alert.alert('FB sign-in failed')
    }
    } catch ({ message }) {
    console.log(`Facebook 1 Error: ${message}`);
    Alert.alert(`first ${message}`);
    }
    };

    const onSignInFB = credential => {
    firebase
    .auth()
    .signInWithCredential(credential)
    .then(function() {
    navigation.navigate("Home");
    })
    .catch(function(error) {
    // Handle Errors here.
    var errorCode = error.code;
    var errorMessage = error.message;
    // The email of the user's account used.
    var email = error.email;
    // The firebase.auth.AuthCredential type that was used.
    var credential = error.credential;
    });
    };
    };

    我记录了一些元素,如下所示:

    • 虽然没有可用的错误属性,但错误代码为 auth/internal-error。 Console.logging 错误本身产生了错误无效的 IdP 响应/凭据
    • 来自 logInWithReadPermissionsAsync 的 token 是有效的访问 token (字符串)
    • 来自 facebookProvider.credential(token)凭证是:
        Object {"oauthIdToken": "EAAGUBzIZAgb0BAKgeMa5E7qHm8WNJYv5SeuQ8DHyhkUlAnkMhE7niu6tx3e2amSMHSEqG9B0MV4a9dygwgjs337PR7AA3M4PZB2F6x6n1FwAEyZBKhZBpOSE2OWQ9dJipirpafg61TKX36hnKIzaIcwRkjs8YYRBbDuLnZAhJzWst3ZBM5tafwxYKumv2F4kYdexxZAXqb1nosnwYodNvB9bstkcaBrfB8ZD",
    "providerId": "facebook.com",
    "signInMethod": "facebook.com",
    }
    • firebase.auth().currentUsernull

    我还仔细检查了下面可能出现的错误,但找不到任何错误:

    • FB 已在 Firebase 身份验证登录中启用
    • AppId 和应用 key 已从 FB 应用正确复制到 Firebase(以及重定向 URI)
    • 将访问 token 从 Facebook.logInWithReadPermissionsAsync 传递到 Facebook 的访问 token 调试器,并查看是否有任何错误(例如过期或无效)
    • 检查是否从 facebookProvider.credential(token) 返回实际凭证并传递给 signInWithCredential

    如果能找出问题的根源就太好了! (一种可能是从 logInWithReadPermissionsAsync 返回的访问 token 与 credential 对象中的 oauthIdToken 属性相同,但我没有手动输入或更改其中任何一项。)

    感谢您的阅读:)

    最佳答案

    我今天对此很头疼,解决方案是将一个对象传递给 credential 调用,尽管文档说要传递一个字符串。此外,对象属性需要设置为accessToken

    所以代替:const credential = facebookProvider.credential(token);

    尝试:const credential = facebookProvider.credential({ accessToken: token });

    根据文档,我不知道为什么需要该 key 或为什么它必须是一个对象,但它在我的情况下有效。希望对您有帮助!

    关于javascript - 尝试在 Firebase 身份验证列表中添加 FB 用户时出现 "Error: Invalid IdP response/credential",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59441436/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com