Firebase と Twitter でユーザー認証を設定しようとしています。この回答のコードは、ある程度機能します。
var url = 'https://molovo-comments.firebaseio.com/';
var myDataRef = new Firebase(url);
var dataStore = (function(){
var user = null;
var auth = new FirebaseSimpleLogin(myDataRef, function(error, data) {
if (error) {
// an error occurred while attempting login
console.log(error);
} else if (user) {
// user authenticated with Firebase
user = data;
console.log('User ID: ' + user.id + ', Provider: ' + user.provider);
} else {
// user is logged out
}
});
return {
getAuth : function() {
if (auth) return auth;
// else show some error that it isn't loaded yet;
},
getUser : function() {
if (user) return user;
// else show some error that it isn't loaded yet;
}
};
})();
を使用して auth 変数にアクセスでき、dataStore.getAuth()
user.id がコンソールに記録されます。呼び出しdataStore.getAuth().login('twitter')
も機能し、Twitter のログイン ページにリダイレクトされます。
しかし、を使用して外部からユーザー ID を返そうとするとdataStore.getUser().id
、cannot read property 'id' of undefined
エラーが発生します。
私はおそらくuser
間違った方法で戻ってきていると思うので、誰かがこの問題に光を当てることができれば、とても感謝しています.
更新: @BenjaminWarren と @SpinyNorman からの回答のおかげで、次のように正しい変数を使用するようにコードを更新しました。
var dataStore = (function(){
var userObj = null;
var auth = new FirebaseSimpleLogin(myDataRef, function(error, user) {
if (error) {
// an error occurred while attempting login
console.log(error);
} else if (user) {
// user authenticated with Firebase
userObj = user;
console.log('User ID: ' + userObj.id + ', Provider: ' + userObj.provider);
} else {
// user is logged out
}
});
return {
getUser : function() {
if (userObj) return userObj;
// else show some error that it isn't loaded yet;
},
getAuth : function() {
if (auth) return auth;
// else show some error that it isn't loaded yet;
}
}
})();
jQuery(document).ready(function($) {
console.log(dataStore.getUser().id);
});
コンソール出力は次のようになります。
Uncaught TypeError: Cannot read property 'id' of undefined main.js:37
User ID: 222936694, Provider: twitter main.js:14
dataStore.getUser().id
認証オブジェクトが返される前にログに記録されているため、未定義です。getUser() リターンでさまざまな setTimout 値などを試しましたが、常に前に返されますauth
乾杯、
ジェームズ