2

初期設定:

私のアプリは facebook の oauth システムを使用しており、本番、テスト、開発の 3 つの異なる環境があります。Facebookアプリの詳細設定に、3つの有効なリダイレクトURLをすべてリストしました(人々がここここで行うように):

Valid OAuth redirect URIs:
  http://myapp-pro.herokuapp.com,
  http://myapp-tst.herokuapp.com,
  http://myapp-dev.herokuapp.com

さらに、基本設定では、アプリには次のものがあります。

App domains: myapp-pro.herokuapp.com
Site URL: http://myapp-pro.herokuapp.com

これまでに何が起こるか:

  1. 本番環境を使用する場合は、すべて問題ありません。

  2. テスト中または開発中の場合 (どちらも または にはありませんApp domains) Site URL:

    を。ユーザーが私のサイトにログインし、すでに Facebook にログインしている場合、すべてがうまくいきます。

    b. ユーザーが私のサイトにログインしているが、Facebook にまだログインしていない場合、Facebook は次のように文句を言います。

    Given URL is not allowed by the Application configuration
    One or more of the given URLs is not allowed by the App's settings. It must match the Website URL or Canvas URL, or the domain must be a subdomain of one of the App's domains.
    

後者のケースの詳細:

  1. その時点でのブラウザーの現在の URL は次のとおりです (正確ではありません。わかりやすくするためnextに一部をデコードしました)。cancel_url

    https://www.facebook.com/login.php?
      skip_api_login=1&
      api_key=...&
      signed_next=1&
      next=https://www.facebook.com/v2.0/dialog/oauth?
        redirect_uri=http://myapp-dev.herokuapp.com?
        scope=public_profile&
        email&
        user_birthday&
      response_type=code&
      client_id=...&
      ret=login&
      cancel_url=http://myapp-dev.herokuapp.com?
        error=access_denied&
        error_code=200&
        error_description=Permissions+error&
        error_reason=user_denied#_=_&
      display=page
    
  2. お気づきかもしれませんが、redirect_uricancel_urlドメインは完全に等しく、この値 ( http://myapp-dev.herokuapp.com) は のリストに存在しValid OAuth redirect URIsます。

  3. ここを手動でcancel_url運用ドメインに変更すると、facebook のエラーは消えます。

  4. パラメータを手動で完全に削除cancel_urlすると、エラーも消えます。

  5. メッセージを無視して資格情報を入力し、ログイン ボタンを押すと、リダイレクトされhttps://www.facebook.com/login.php?login_attempt=1、他に何も起こりません。


感想:

  1. cancel_urlのリストにfacebook が存在することを確認していないようですValid OAuth redirect URIs

  2. すでに述べた手動のハッキングは、通常のユーザーには明らかに受け入れられないため、別のアイデアを求めます.

  3. さまざまな環境に対応するさまざまなFacebookアプリを使用することも、イデオロギー的には良い考えではありません.


回避策:

  1. コメントで@CBRoeが述べたように:代わりに独自のトップレベルドメインを使用しようとしました(および値herokuapp.comとして使用)、それは機能しました。これは最初の質問を解決しませんが、良い回避策です。App domainsSite URL
4

1 に答える 1