簡體   English   中英

訪問嵌套對象時未定義

[英]Undefined in accessing a nested object

我無法訪問名為result的分層對象中的某個屬性:

result Object {
  "additionalUserInfo": hg {
    "isNewUser": true,
    "providerId": "password",
  },
  "credential": null,
  "operationType": "signIn",
  "user": Object {
    "apiKey": "some_api",
    "appName": "[DEFAULT]",
    "authDomain": "firebase.firebaseapp.com",
    "createdAt": "1579042072524",
    "displayName": null,
    "email": "qp@email.com",
    "emailVerified": false,
    "isAnonymous": false,
    "lastLoginAt": "1579042072524",
    "phoneNumber": null,
    "photoURL": null,
    "providerData": Array [
      Object {
        "displayName": null,
        "email": "qp@email.com",
        "phoneNumber": null,
        "photoURL": null,
        "providerId": "password",
        "uid": "qp@email.com",
      },
    ],
    "redirectEventId": null,
    "stsTokenManager": Object {
      "accessToken": "some_access_token",
      "apiKey": "some_api_key",
      "expirationTime": 1579045673373,
      "refreshToken": "some_refresh_token",
    },
    "tenantId": null,
    "uid": "some_uid",
  },
}

我想訪問“some_access_token”,但我只能訪問result.user ,但如果我這樣做result.user && result.user.stsTokenManager

if(result.user.stsTokenManager){
   console.log(result.user.stsTokenManager.accessToken)
}

我也試過const accessToken = (((result || {}).user || {}).stsTokenManager || {}).accessToken但仍然未定義

更新

這就是我嘗試訪問變量的方式,但仍未定義。

 const submitHandler = async (input) => {
        const { email, password } = input && input
        let result;
        try {
            result = await Firebase.auth().createUserWithEmailAndPassword(email, password)
        } catch (err) {
            switch (err.code) {
                case 'auth/email-already-in-use':
                    console.log("message", err.message)
            }
        }
        const token = (((result || {}).user || {}).stsTokenManager || {}).accessToken
        console.log("accessToken", token)


        // or

        if (result.user.stsTokenManager) {
            console.log(result.user.stsTokenManager.accessToken)
        }

        // or
        console.log(result && result.user.stsTokenManager.accessToken)
    }

我什至嘗試過 lodash:

const accessToken = _.get(result, ['user', 'stsTokenManger', 'accessToken'])

但仍然未定義

奇怪的部分是我可以訪問result.user.emailresult.user, emailVerifiedresult.user.providerDataresult.user.uid ,但我在result.user.stsTokenManagerresult.user.lastLoginAtresult.user.createdAt得到undefined result.user.createdAt即使當我使用console.log(result) ,我也可以清楚地看到變量已填充。

要解決您的問題,您必須在之后添加:

result = await Firebase.auth().createUserWithEmailAndPassword(email, password)

以下行:

const resData = await firebase.auth().currentUser.toJSON()

通過這種方式,您可以訪問您正在尋找的所有數據。 例如,現在您可以通過以下方式獲取accessToken

resData.stsTokenManager.accessToken

...

resData.stsTokenManager.expirationTime

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM