console.log(userObj);では見えている'email'というプロパティが、次の行のconsole.log(userObj.email);でundefined、console.log(userObj.hasOwnProperty('email'))でfalseになります。
###前提・実現したいこと
ログイン後、セッションを確立したユーザーのメールアドレスを動的に表示しようとしています。
認証はAWS Cognitoを使っていて、getUserAttributesで取得したメールアドレスをuserObjというオブジェクトにemailというキーで格納しています。その後userObjを戻り値としたresolve(userObj)の中で、$('#email').html(userObj.email);でメールアドレスを表示しようとしています。
###発生している問題・エラーメッセージ
メールアドレスが表示されなかったので、console.log(userObj)で中身を確認したところ、'email: hogehoge@example.com'はきちんと見えました。ですが直後に実行したconsole.log(userObj.email)はundefinedになり、console.log(userObj.hasOwnProperty('email'))はfalseになりました。
問題の箇所
console.log(userObj); console.log('userObj.email → ' + userObj.email); console.log('userObj.hasOwnProperty("email") → ' + userObj.hasOwnProperty("email"));
このように、Objectの中身には「email: "hogehoge@example.com"」というのがは見えていますが、直後にはそれがundefinedになり、プロパティ自体存在しないと言われてしまいます。
###該当のソースコード
javascript
1 validateSession(cognitoUser).then(function(userObj){ 2 console.log(userObj); 3 console.log('userObj.email → ' + userObj.email); 4 console.log('userObj.hasOwnProperty("email") → ' + userObj.hasOwnProperty("email")); 5 $('#username').html(userObj.username); 6 $('#email').html(userObj.email); 7 },invaildSession); 8 9var validateSession = function(cognitoUser){ 10 return new Promise(function(resolve, reject){ 11 var userObj = {}; 12 if(cognitoUser != null){ 13 $.each(cognitoUser, function(key, val){ 14 userObj[key] = val; 15 }); 16 cognitoUser.getSession(function(err, sessresult){ 17 if(sessresult){ 18 console.log('Session has been validated.'); 19 // Get user's attributes (ex: email) 20 cognitoUser.getUserAttributes(function(err, attrresult){ 21 if(err){ 22 console.log(err); 23 return; 24 } 25 //attrresultの中身をuserObjに格納 26 $.each(attrresult, function(index, val){ 27 userObj[val['Name']] = val['Value']; 28 }); 29 }); 30 resolve(userObj); 31 }else{ 32 console.log('No sessresult'); 33 reject(); 34 } 35 }); 36 }else{ 37 console.log('No cognito User'); 38 reject(); 39 } 40 }); 41};
###補足情報
Google Chrome 54.0.2840.98 (64-bit)
コンテンツはAmazon S3に置いてます。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/08/20 20:57