13

firebase を使用して構築された Web アプリケーションがあります。私の Web アプリでは、google、firebase、twitter のサインアップ/サインイン機能を使用しています。

これを api.ai エージェントと統合して、アカウントをシームレスにリンクしたいと考えています。したがって、ユーザーはモバイル デバイスから googel ホーム/アシスタント アプリを使用してエージェントに接続します。この段階で、Google アカウント ID、Google メールアドレス、ユーザー名を取得します。

ユーザーが既に存在する場合、エージェントが必要とするトークンを送信できます。しかし、ユーザーが新しい場合は、firebase データベースにアカウントを作成したいと考えています。Firebase でフェデレーション アカウントを手動で作成する可能性が見つかりませんでした (nodejs アプリケーション/クラウド機能から)!

電子メール + ダミー パスワード アカウントを作成できる可能性があることは知っていますが、それは私が探しているものではありません。ユーザーが私の Web アプリにログインしようとしたときにダミーのパスワードで登録したため、Google サインイン機能を使用します。

メールとダミーのパスワードを作成すると、フローがうまくいかず、ユーザーが私の Web チャネルにアクセスしたときに、パスワードを変更し、Google アカウントを再度リンクするように強制する必要があります。

ファイルからユーザーをインポートできる CLI アプローチがあります。これが可能である場合、誰かがクラウド機能でこれを行う方法を教えてもらえますか?

4

1 に答える 1

0

これは質問に対する完全な回答ではありません

firebaseツールのインポート オプションに基づいて、簡略化された Gist を作成しました。これを使用して、クラウド関数からのインポートをトリガーできます。私が直面している唯一の不具合は、アクションを実行するために Bearer アクセス トークンを渡さなければならない場所です。

今のところ、私getAccessTokenimport/api.js. これは、Firebase 管理者のためにアクセス トークンを直接取得するか、クラウド機能内からリクエストが行われたときにチェックをバイパスするために、Firebase チームの助けが必要な場所です!

getAccessToken: function() {
    return Promise.resolve({access_token: accessToken});
    // return accessToken ? RSVP.resolve({access_token: accessToken}) : require('./auth').getAccessToken(refreshToken, commandScopes);
  },

上記の関数では、コメント付きのコードは実際には、CLI ツールからaccessToken実行中にユーザーによって取得された実行を取得しています。firebase importコマンド ライン ユーティリティとして、ユーザーに許可を求めることは機能しますが、クラウド関数内で実行する場合は、次のいずれかのオプションを使用する必要があります。

a) クラウド機能は管理者権限内で実行されているため、権限を無視してください! b) または管理者 SDK から直接アクセス トークンを取得する手段を提供します。

要点は github の here にあります。私はそのほとんどをfirebaseツールプロジェクトからそのまま取り、cloudFunctions内で機能するように少し調整しました. firebase-tools からできるだけ最小限のコードを取り込もうとしました。

これを実行すると、エラーは 35 行目に表示されますlib/import/api.js

<<< HTTP RESPONSE BODY 
{  
   "error":{  
      "errors":[  
         {  
            "domain":"global",
            "reason":"authError",
            "message":"Invalid Credentials",
            "locationType":"header",
            "location":"Authorization"
         }
      ],
      "code":401,
      "message":"Invalid Credentials"
   }
}
于 2017-12-11T06:57:00.520 に答える