1

Facebookログインの背後にある哲学を理解しようとしているだけです。

  1. Facebookにログインしている場合、私のWebサイトはこれを取得し、自動的にログインします。
  2. Facebookからログアウトした場合、Facebookで認証されていませんが、Webサイトは引き続き機能します
  3. WebサイトまたはFacebookのいずれかを介してログインすると、認証され、FacebookまたはWebサイトを認証済みユーザーとして使用できます。
  4. その後、Facebookからログアウトすると、アプリは認証されますが、Facebookは認証されません。
  5. アプリからログアウトしてすべてのセッションを強制終了し、手動でCookieを削除すると、正常にログアウトできます。

両方にログアウトした後の問題は、使用済みのIDとトークンを維持していること$facebook->getUser();ですgetAccessToken();。これらはどこから来たのですか?

PHPSDKを使用しています

4

1 に答える 1

2

Facebookを使用してアプリケーションにログインすると、アプリケーションはFacebookにユーザーの認証を要求します。認証が成功すると、Facebookはアプリケーションに認証されたことを通知します。その後、アプリケーションは独自のセッションを維持します。

Facebookアカウントまたはアプリケーションで行うことは、相互の変更を反映していない可能性があります。たとえば、Facebookアカウントからログアウトする場合、アプリケーションに関する限り、認証されているため、アプリケーションは認識しません。同時に、Facebookからログアウトしたとき、Facebookはアプリケーションに既にログアウトしていることを通知しませんでした。

アプリケーションとFacebook(または他のOAuthプロバイダー)は、独自の個別のセッションを維持します。

あなたの質問のために:

  1. はい、Webサイトは訪問者をFacebookのリンクにリダイレクトします。このリンクは、クライアントにログインしていることを自動的に通知します。Facebookアカウントを使用してアプリケーションに最初にアクセスしようとしたときにアプリケーションのアクセス許可を既に付与しているため、プロンプトは表示されなくなります。

  2. これは、個別のセッションのために機能します。Facebookからログアウトしても、アプリケーションにはまだログオンしています。アプリケーションがFacebookを介して本人確認を再度試みない限り、そうではありません。その場合、認証は失敗します。

  3. これは正しいですが、Facebookなしでアプリケーションを認証する別の方法(リンクされたアカウントを使用した代替ログインなど)がない限り、Facebookにログインせずにアプリケーションにログインすることはできません。ただし、その場合でも、ログインするにはログインフォームを使用してFacebookにログオンする必要があります。アプリケーションからFacebookにログインすることはできません。

  4. それは正しいです。Facebookからログアウトすると、Facebookからログアウトされます。個別のセッションのため、アプリケーションからもログアウトする必要があります。

  5. また正しい。

あなたのケースでおそらく起こっていることは次のとおりです。

  1. アプリケーションからログアウトしました
  2. ホームページにリダイレクトされます
  3. あなたがログインしていないため、あなたのホームページはあなたを認証しようとします
  4. Facebookにリダイレクトされます
  5. Facebookはあなたの身元を確認し、アプリケーションにリダイレクトします
  6. アプリケーションが再度認証します

これを解決するために、ホームページは自動認証されるべきではありません。Facebookで認証を開始する前に、ユーザーがクリックする必要のあるボタン(「Facebookでログイン」など)が必要です。

Facebookからユーザーを「強制的にログアウト」することもできません。したがって、アプリケーションを使用した後、ユーザーはアプリケーションとFacebookからログアウトする必要があります。アプリケーションがセッションCookieを使用している場合、ブラウザを閉じるとユーザーはログアウトされます。

于 2012-09-30T00:15:42.010 に答える