[英]Firebase Authentication - Migrate users from SQL to Firebase
我正在與Firebase一起將我的網站重寫為JavaScript。 到目前為止,我喜歡Firebase,但是現在我需要將所有舊用戶遷移到Firebase系統。
所有用戶都具有自定義的額外設置,我不希望刪除服務器所在的位置(€103,p / m)。 所以我需要全部復制。 據我所知,它需要一個接一個地完成( createUserWithEmailAndPassword
)。 在服務器上,創建一個JSON對象,並在新站點上執行以下操作:
$.get("/alljsonfromalink", function (rdata) {
var $jData = jQuery.parseJSON(rdata);
var i = 0;
for (var user in $jData) {
whenYouFeelLikIt(user, $jData);
}
});
function whenYouFeelLikIt(i, $jData) {
setTimeout(function() {
firebase.auth().signInWithEmailAndPassword($jData[i].email, RandomPassword)
.then(function(){
console.log("Succes Login");
//if exist i set extra settings
setusersettings($jData[i], $jData[i].email);
})
.catch(function(error) {
var errorCode = error.code;
console.log(errorCode);
if(errorCode == "auth/user-not-found") {
firebase.auth().createUserWithEmailAndPassword($jData[i].email, RandomPassword).then(function () {
console.log("Created: " + $jData[i].email);
});
}
});
},2000 * (i));
}
它可以工作,但是即使有2秒的超時,在插入20或30次之后我還是得到了:
firebase.js:73 Uncaught Error: We have blocked all requests from this device due to unusual activity. Try again later.
任何人都知道如何解決此問題?
-更新-
JamieB建議使用.fetchProvidersForEmail()所以現在我使用
firebase.auth().fetchProvidersForEmail($jData[i].email)
.then(function(succes){
console.log(succes.length);
if(succes.length == 0) {
// the createUserWithEmailAndPassword() with timeout
create(i, $jData);
}
})
FIREBASE REFERENCE指示createUserWithEmailAndPassword(email, password)
返回firebase.Promise
其中包含非null firebase.User
。 因此,它返回了一個承諾。 這些可以放入數組,該數組可以傳遞給.all
Promise方法。 您可以使用以下功能將用戶名和photoURL添加到將存儲它們的Auth子系統。
可以將任何其他用戶屬性存儲在users
節點下,其中每個子ID是用戶的UID。 底部的腳本顯示了一個使用Promise.all的示例。
function registerPasswordUser(email,displayName,password,photoURL){
var user = null;
//NULLIFY EMPTY ARGUMENTS
for (var i = 0; i < arguments.length; i++) {
arguments[i] = arguments[i] ? arguments[i] : null;
}
auth.createUserWithEmailAndPassword(email, password)
.then(function () {
user = auth.currentUser;
user.sendEmailVerification();
})
.then(function () {
user.updateProfile({
displayName: displayName,
photoURL: photoURL
});
})
.catch(function(error) {
console.log(error.message);
});
console.log('Validation link was sent to ' + email + '.');
}
... Promise.all的示例:...
function loadMeetings(city,state) {
return ref.child('states').child(state).child(city).once('value').then(function(snapshot) {
var reads = [];
snapshot.forEach(function(childSnapshot) {
var id = childSnapshot.key();
var promise = ref.child('meetings').child(id).once('value').then(function(snap) {
return snap.val();
}, function(error) {
// The Promise was rejected.
console.error(error);
});
reads.push(promise);
});
return Promise.all(reads);
}, function(error) {
// The Promise was rejected.
console.error(error);
}).then(function(values) {
//for each snapshot do something
});
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.