0

FireBasic用のCloud Functionsを使用してコンテンツを提供しようとしています。ユーザーがログインしているかどうかを検出したいと思います。Firebaseが現在のユーザーをCloud機能に渡すように書き換えます

{ 
    "database": { 
    "rules": "database.rules.json" 
    }, 
    "hosting": { 
    "public": "public", 
    "rewrites": [{ 
     "source": "**", 
     "function": "getProfile" 
    }] 
    } 
} 

これは正常に動作し、私が要求されていますパスに基づいて適切なコンテンツを提供しています:私はこのようになります私のfirebase.jsonで書き換えを設定しました。しかし、私はクライアント側で何もしていないので(つまり、クライアントサイドのリダイレクトではなくリライトを使用しています)、クライアント側のスクリプトから現在のユーザーを取得する機会がありません。

リクエストオブジェクトのヘッダーまたはプロパティを使用して、サーバー側の書き換えシナリオでログインしているユーザーとログインしていないユーザーとで異なるコンテンツを配信できる方法はありますか?

+1

このサンプルを使い始めると、いくつかのアイデアから始めることができます。 https://github.com/firebase/functions-samples/tree/master/authenticated-json-api –

+0

@DougStevensonチップオフをありがとう。私はそのレポを見て、 'req.headers.authorization.startsWith( 'Bearer')コードを見ています...有望そうです - ありがとう! – James

+0

はい、AuthorizationヘッダーはFirebase認証トークンを格納するために使用されていますが、認証トークンは機能側で検証されます。 –

答えて

1

Firebaseホスティングは、クラウド機能を呼び出すときに__sessionという名前のクッキーをすべて通過します。

firebase.auth().onIdTokenChanged(user => { 
    if (user) { 
    user.getIdToken().then(token => { 
     document.cookie = `__session=${token};max-age=3600`; 
    }); 
    } else { 
    document.cookie = '__session=;max-age=0'; 
    } 
}); 

次に、あなたのクラウド機能で、あなたはクッキーのうち、IDトークンを解析し、それを確認することができます。これを行う簡単な方法は、単にあなたのWebアプリのIDトークンをリッスンし、適切にクッキーを設定することですコードlike in this sampleを使用してください。

+0

おかげさまマイケル - ユーザーがログインしたときにクッキーを設定すると、クラウド機能に書き換えられるエンドポイントを含む将来のすべてのリクエストは、クッキーに沿って(期限切れになるまで)渡されますか?つまり、クライアント側でCookieを各リクエストに渡すことを容易にするために何もする必要はありません。 – James

+1

ブラウザは自動的にクッキーを自動的に渡します。しかし、IDトークンは1時間しか持続しません。なぜなら、有効期限が1時間に設定されていて、私たちは 'onIdTokenChanged'(idトークンがリフレッシュされると起動します)を聞いています。 –

+0

ありがとう...私はそれをコード化し、私が望むように動作するかどうか確認します。 – James

関連する問題