我正在重写我的网站,将JavaScript与Firebase结合使用。到目前为止,我喜欢Firebase,但现在我需要将所有旧用户迁移到Firebase系统。Firebase身份验证 - 将用户从SQL迁移到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.
任何人都有一个想法如何解决这个问题?
--Update--
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);
}
})
也许你可以尝试使用https://firebase.google.com/docs/reference/js/firebase.auth .Auth#fetchProvidersForEmail而不是以检查用户是否存在的方式登录? 我无法测试这个,但看着API,看起来像一种方式来确定一个用户是否存在没有自动化。 – JamieB
谢谢,它有点帮助。现在我可以创建更多的用户,但是仍然在X插入后我被阻止。 – user1664803
您是否需要预先创建所有用户?你不能在他们第一次访问你的网站时在Firebase中创建它们吗?或者:你可以尝试从'createUserWithEmailAndPassword()'开始,它可能有不同/更高的速率限制。 –