1

TL;DR : auth=CREDENTIALSFirebase でシンプル ログイン (メール/パスワード) を使用する方法はありますか?

C# アプリケーションのユーザーを Firebase に接続しようとしています。シークレット トークンを使用してほぼすべての呼び出しをセットアップできましたが、データの送信先を知るために、少なくとも現在のユーザー UID を取得できるようにする必要があります。

PUSH、PUT、GET リクエストで行った方法は、ログインとしてシークレット トークンを使用して、次のようなものでした。

var authToken = "SECRET";
url = "https://MyLocation.firebaseio.com/" + url + ".json?auth=" + authToken;
return WebRequest.Create(url);

しかし今、次のようなメール/パスワードの簡単なログインをサポートするものを取得したいと思います:

var authToken = "{email:an@email.com, password:thePassword}";
url = "https://MyLocation.firebaseio.com/" + url + ".json?auth=" + authToken;
return WebRequest.Create(url);

CURL を使用しようとしてもうまくいきませんでした...それを行う方法はありませんか? または何か提案はありますか?

助けてくれてありがとう!

4

2 に答える 2

1

Firebase のサポートと話し、一時的な解決策と実際の解決策を見つけました。

実際の解決策: Firebase を「データベース」として使用して、すべての環境でユーザーとそのパスワードを手動で管理します。それが基本的に、私が質問でやろうとしていたことでした。Firebase custom authを使用することで解決します。

一時的な解決策:(そして、実際の解決策が提供するほどのセキュリティは必要ないので、私がしたこと)

  1. 現在のユーザーを識別するものを取得します。ここでは、現在のユーザーの電子メールを尋ねることなく取得できます。
  2. Base64 識別子:

    byte[] result = System.Text.Encoding.UTF8.GetBytes(email);
    email = Convert.ToBase64String(result);
    
  3. 必要な情報を REST 経由で配置、プッシュ、パッチするfirebaseio.com/Base64

  4. 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);
                }
            }
        );
    }
  1. 次に、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 アプリケーションを使用する限り)。

于 2015-03-25T19:51:44.437 に答える
0

WebApi アプリケーションの場合、JWT トークンを OWIN パイプラインと共に使用できます。

app.UseJwtBearerAuthentication(new JwtBearerAuthenticationOptions
{
    AuthenticationMode = AuthenticationMode.Active,
    AllowedAudiences = new[] { FirebaseValidAudience },
    Provider = new OAuthBearerAuthenticationProvider
    {
        OnValidateIdentity = OnValidateIdentity
    },
    TokenValidationParameters = new TokenValidationParameters
    {
        IssuerSigningKeys = issuerSigningKeys,
        ValidAudience = FirebaseValidAudience,
        ValidIssuer = FirebaseValidIssuer,
        IssuerSigningKeyResolver = (arbitrarily, declaring, these, parameters) => issuerSigningKeys
    }
});        

Firebase ASP.NET WebApi 認証アプリケーションのサンプルは次のとおりです: https://github.com/PavelDumin/firebase-webapi-auth

于 2019-08-31T14:33:44.417 に答える