私のプロジェクトはNode.jsとExpressを使用していますが、問題は一般的なアプローチに関するものです。
私たちのユーザーはすべてFBの出身であり、FB以外の認証はありません。一部のアクションを特定のFBユーザーに関連付ける必要があり、FBと通信するためのトークンも必要です。
現在、私たちはそのようにしています:
- ユーザーがページにアクセスします
- 目に見えないブロックがあります。1つはユーザーのアバターと名前のプレースホルダー(「ログイン」)、もう1つはFBログインをトリガーするボタン(「ログアウト」)です。
- FB JS SDKを使用して、ユーザーのログインステータスを確認します。接続されている場合(実際には、FBにログインし、アプリを認証し、必要なすべての権限を提供します)、ユーザーの名前とFB IDを取得し、「ログイン」ブロックを表示します。それ以外の場合は、「ログアウト」ブロックが表示されます
- 一部のアクションでログインしたユーザーの場合、ユーザーのaccess_tokenはAJAX(心配なし、ここではHTTPS)を介してサーバーに渡され、ユーザーの壁への投稿などのアクションのためにサーバーコードによって使用されます。
- FBログインボタンはJSによって処理され、FB.login()を呼び出します
- JS authResponseChangedイベントで、明らかなアクションが実行されます(ログイン/ログアウトブロックの表示/非表示)
良い点:ユーザーのステータスが有効であることは常にわかっています(トークンのTTLは通常のページの有効期間よりも長いため、ここでは問題ありません)。
私たちがあまり好きではないこと:*クライアント側のトークンは短命です(はい、交換できますが、代替手段が見つかった場合は交換したくありません)*通常はFBにいくつかのリクエストが必要です(1-ロードJS SDK、2-何かを表示できるようになるまでログインステータスを取得します。私たちのサイトの「ログイン」ブロックが空になるまで。
質問はなんですか?
ここでサーバー側のコードを使用し、少なくともユーザーがログインしていることが確実なときにユーザーの名前とアバターをレンダリングする最適な方法を探しています。
私はこのようないくつかのスキームを想像することができます:
- サーバー側の認証(リダイレクトあり)を使用して、存続期間の長いトークンを取得し、サーバーに保持します
- セッションでユーザーのステータス(ログイン/ログアウト、FB ID、名前)を保存します
- セッションにログイン状態がある場合は、サーバーでテンプレートを処理するときに名前とアバターをレンダリングします
懸念事項:
- ユーザーがFBからログに記録した場合、またはアプリの権限を取り消した場合、それをどのように知る必要があり、いつチェックする必要がありますか(Nリクエストごとにチェックしますか?X時間ごとにチェックしますか?トークンがY時間で期限切れになるときにのみチェックしますか?)
- 代わりに、テンプレートをレンダリングする前にサーバーからユーザーのステータスを確認すると(公式の例の場合)、速度が低下しますよね?原因FBAPI呼び出しは、暑い時間帯にはかなり遅くなる可能性があると思います。