Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/471.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何访问从Firebase返回的oauthIdToken?_Javascript_Firebase_Firebase Realtime Database_Firebase Authentication - Fatal编程技术网

Javascript 如何访问从Firebase返回的oauthIdToken?

Javascript 如何访问从Firebase返回的oauthIdToken?,javascript,firebase,firebase-realtime-database,firebase-authentication,Javascript,Firebase,Firebase Realtime Database,Firebase Authentication,我正在尝试使用firebase签名获取结果的oauthIdToken。成功登录后,我将返回以下信息: user Object { "additionalUserInfo": bg { "isNewUser": false, "profile": Object { "at_hash": "aWhmsdfeef32388EYD8YA", "aud": "100423452193-gvmasfasdfasdfasfda7ee0.apps.googleuser

我正在尝试使用
firebase
签名获取结果的
oauthIdToken
。成功登录后,我将返回以下信息:

user Object {
  "additionalUserInfo": bg {
    "isNewUser": false,
    "profile": Object {
      "at_hash": "aWhmsdfeef32388EYD8YA",
      "aud": "100423452193-gvmasfasdfasdfasfda7ee0.apps.googleusercontent.com",
      "azp": "100406623293-gvmt0erkkob6asdfadfi7ee0.apps.googleusercontent.com",
      "email": "fake@gmail.com",
      "email_verified": true,
      "exp": 1579142529,
      "family_name": "last name",
      "given_name": "first name",
      "iat": 1579138929,
      "iss": "https://accounts.google.com",
      "locale": "en",
      "name": "first last name",
      "nonce": "Ow_sVcasdf50LdbHdTaro",
      "picture": "https://lsfasfa.googleusercontent.com/-iKnasfasdf34/AAAAAAAAAAI/AAAAAAAAAAA/ACHi3re9asdfas7_Erg/s96-c/photo.jpg",
      "sub": "100824234342680931658",
    },
    "providerId": "google.com",
  },
  "credential": Object {
    "oauthAccessToken": "ya29.Il-5B47AOKYEQ5NYikv93gYyyhWu_2FEHEaadfaasfasdfasdfBVJCDXG3HJ9MdqalyyxvZ-6jMoqRsaGzhPUg6Cg862vF25xocHR6rnbh_-HuP2MMey4s59Gx8fXLwgQ99dQ",
    "oauthIdToken": "eyJhbGciOiJSUzsdfagyZDgyMDQwM2VlODUxOGM0YWFiYjJiOWZlMzEwY2FjMTIiLCJ0eXAiOiJKV1QifQ.eyJpc3MiOiJodHRwczovL2FjY291joiZW4iLCJpYXQiOjE1NzkxMzg5MjksImV4cCI6MTU3OTE0MjUyOX0.i-YiWbokasfiP_-xWCHJUyT_aLWp7eb3YCE6mzRUbbuKsdfsdfHptczrMXB5vMZY_5JFp8ZD2zxoNlvhTpuMY3B_zw_5Irk6HzuHGHXyAgzNJjh5n6cYR8gOiOsfsdfcKATpHcG7H_gOCwns_fI44I820qcmrogaEXuW-i3u9X5aXbTYqW5EaZQvQzuHkYHO2VWoktOTZsfsdfsfOaYYGU-tqW-ygAB_aWD7VPjIuUY4ySPF4k6IRR1x3ZysfdsdfdGGarX3isPGxMrDMtbRtsfsdfVaKsZdRtCpbfNUbFO8NR6x-pIvKsdfA",
    "stsTokenManager": Object {
      "accessToken": "eyJhbGciOiJSUzI1NiIsASDAFASFVmZTJlZDQyOWI3MzY0M2Y2NTEiLCJ0eXAiOiJKV1QifQ.eyJuYW1lIjoicmVudGVyaWkgcmVudGVyaGUuY29tIn19.n7z7HlL9lU7VEOA4fGIHvE9UMLSu5uo1rpfTm6m-N5A8CaKQaDu96sAvsG8iOVx8PYnytadffsafSRHyJoS0bzZbpQS6-YItdM5bIPxLMTFYEb0-Ho-tPnhRBSfWfPqJnK0c18YBFtHTG-0TvLNppmuZFG9AJjZZr0ASIkoOWmkI0gdOUAKBkutwMb3oitxeorT-pUdtKB5Rk23ekewz05oi7R5TI4xpBX5LsPvqaCqI4S5wxHe_BilRiiMhxd_lINdWftEkpctKSApJubML7mB9A",
      "apiKey": "AIzaSysdfsdfsiWO7_2buk",
      "expirationTime": 1579142530341,
      "refreshToken": "AEu4IL01n_G6c4_Wg6fzseXRGPJHEAJnhzw7GLZVTS4RICikJ8PUgmmtNWXjcttOSbmYVCJDzGluUvTNKPHa4aS8gG0R3ijmrvPpcyJFPWZ5dRRDIlzxuoSyt70mewdRYgK4Eao7W21550slj7qHu8ZT_1bACJb31e_y7UnL2QjJEuvKwcWII8v8mgMPpYC2RH6fKg0Xrv9XLBgTxso25KfDrlfHBfYp4t35CzcVqODl71663_xV0WHhQ5gpv1hW0N39MMU5S0UEbQ_FnMmcJUFygaRvHndj2yNVhGwv_Re0uut3hUanPO_bo6OT4VEgIEEZ6cuiq8jzpH_T7d6bwI9eLZNS6IC1Fu8EJFmUWAtsdyBErq0s39gj2uta0uqLIGP_wlP5F_eDiw",
    },
    "tenantId": null,
    "uid": "KlGB4adfadfn9ktr1",
  },
使用
console.log(result.credential.oauthIdToken)
尝试访问
oauthIdToken
不可避免地会提供
null
,即使变量明显存在。我假设这类似于在
stsTokenManager
中获取
accessToken
,您只能使用
getIdToken()
credential.stsTokenManager.accessToken
方法获取它


如何访问oauthIdToken?

我花了一天的时间来整理这个。我正在研究如何使用承诺,并通过记录对象的各个部分找到了答案

打印出结果对象的输出非常混乱。问题是JSON对象表示法的键与对象上的变量不对应。如果您使用
console.log(JSON.stringify(result.credential))
而不是
console.log(JSON.stringify(result))
您将看到不同的变量名

要查看OAuth标识令牌,请使用不带OAuth前缀的
console.log(console.log(result.credential.idToken))
。同样,访问令牌没有oauth前缀


重要的是要知道,在Google/Firebase世界中,有两种不同类型的身份令牌。Firebase标识令牌是从
user.getIdToken()
获得的。它被发送到服务器以允许验证客户端。它的受众在项目标识符中。另一种类型是身份验证提供者生成的身份令牌,也是问题的主题。如果Auth提供者是Google,那么这是您必须使用的令牌,以针对云功能和云运行服务进行身份验证。令牌需要在请求的
授权:承载idtoken
头中发送。

“寻求调试帮助的问题('为什么此代码不起作用?'))必须包括所需的行为、特定的问题或错误以及在问题本身中重现这些问题所需的最短代码。没有明确问题说明的问题对其他读者没有用处。请参阅:“请确保在公共论坛上发布OAuth凭据时对其进行了编辑。