[英]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.email
、 result.user, emailVerified
、 result.user.providerData
、 result.user.uid
,但我在result.user.stsTokenManager
、 result.user.lastLoginAt
、 result.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.