Firebase のサポートと話し、一時的な解決策と実際の解決策を見つけました。
実際の解決策: Firebase を「データベース」として使用して、すべての環境でユーザーとそのパスワードを手動で管理します。それが基本的に、私が質問でやろうとしていたことでした。Firebase custom authを使用することで解決します。
一時的な解決策:(そして、実際の解決策が提供するほどのセキュリティは必要ないので、私がしたこと)
- 現在のユーザーを識別するものを取得します。ここでは、現在のユーザーの電子メールを尋ねることなく取得できます。
Base64 識別子:
byte[] result = System.Text.Encoding.UTF8.GetBytes(email);
email = Convert.ToBase64String(result);
必要な情報を REST 経由で配置、プッシュ、パッチするfirebaseio.com/Base64
JavaScript を使用するユーザー インターフェイスでは、base64.min.js のようなものを使用して、ユーザーでデータを読み書きするために同じプロセスを実行します。
var ref = new Firebase("https://aFirebase.firebaseio.com");
//Things happen
...
//We register a user
function createUser(email, password){
//Allows us to create a user within firebase
ref.createUser({
email : email,
password : password
}, function(error, userData){
if (error) {
//The creation of the user failed
alert(error);
} else {
//The creation of the user succeeded
console.log("Successfully created user account with uid:", userData.uid);
//We make sure we are at the correct position in our firebase
ref = ref.root().child(base64.encode(email));
//We check if the child exist
if(ref == ref.root()){
//The child doesn't exist
//We have to create it
user = {};
//Set the child with a value for the UID, that will fit with the rules
user[base64.encode(email)] = {uid:userData.uid};
//We set the new child with his value in firebase
ref.set(user);
}else{
//The child exist, we can update his information to go accordingly with our rules
ref.update({uid:userData.uid});
}
//Who wants to register and then not be logged in?
//We can add something upon login if his email is not validated...
login(email, password);
}
}
);
}
次に、Firebase でルールを更新する必要があります。
{
"rules": {
"$uid":{
".read":"!(data.child('uid').exists() == true) || data.child('uid').val() == auth.uid",
".write":"!(data.child('uid').exists() == true) || data.child('uid').val() == auth.uid"
}
}
}
これにより、アプリケーションは何らかの形で安全になります (ユーザーがルールが設定される C# アプリケーションと JS アプリケーションを使用する限り)。