Не определено при доступе к вложенному объекту - PullRequest
0 голосов
/ 15 января 2020

Мне трудно получить доступ к определенному свойству в слоистом объекте с именем 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", но могу только go, пока 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)
    }

Я даже пытался loda sh:

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

, но все еще не определено

Нечетный часть, я могу получить доступ к result.user.email, result.user, emailVerified, result.user.providerData, result.user.uid, но я получаю undefined в result.user.stsTokenManager, result.user.lastLoginAt, result.user.createdAt, хотя когда я console.log(result), я могу четко убедитесь, что переменные заполнены.

1 Ответ

0 голосов
/ 02 апреля 2020

Чтобы решить вашу проблему, вы должны добавить после:

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

следующую строку:

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

В этом Кстати, у вас есть доступ ко всем данным, которые вы ищете. Например, теперь вы можете получить accessToken с:

resData.stsTokenManager.accessToken

...

resData.stsTokenManager.expirationTime

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...