初期設定:
私のアプリは 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
これまでに何が起こるか:
本番環境を使用する場合は、すべて問題ありません。
テスト中または開発中の場合 (どちらも または にはありません
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.
後者のケースの詳細:
その時点でのブラウザーの現在の 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
お気づきかもしれませんが、
redirect_uri
とcancel_url
ドメインは完全に等しく、この値 (http://myapp-dev.herokuapp.com
) は のリストに存在しValid OAuth redirect URIs
ます。ここを手動で
cancel_url
運用ドメインに変更すると、facebook のエラーは消えます。パラメータを手動で完全に削除
cancel_url
すると、エラーも消えます。メッセージを無視して資格情報を入力し、ログイン ボタンを押すと、リダイレクトされ
https://www.facebook.com/login.php?login_attempt=1
、他に何も起こりません。
感想:
cancel_url
のリストにfacebook が存在することを確認していないようですValid OAuth redirect URIs
。すでに述べた手動のハッキングは、通常のユーザーには明らかに受け入れられないため、別のアイデアを求めます.
さまざまな環境に対応するさまざまなFacebookアプリを使用することも、イデオロギー的には良い考えではありません.
回避策:
- コメントで@CBRoeが述べたように:代わりに独自のトップレベルドメインを使用しようとしました(および値
herokuapp.com
として使用)、それは機能しました。これは最初の質問を解決しませんが、良い回避策です。App domains
Site URL