2

私はoauth2devise/ warden/omniauthを介してFacebookと統合するアプリケーションを持っています。すべての作品が見つかり、私はそれに満足しています。

今、私はアプリを新しいfacebook appcenterと統合しようとしています。これは基本的に、ユーザーが私のサイトにアクセスする前に事前認証を受けることに解決しているようです。

基本的に、ユーザーは次のようなURLで終了します

/?fb_appcenter=1&code=xxxxxx

しかし、deviseのomniauthcontrollerは別のURL、つまり

/users/auth/facebook/callback

コードクエリパラメータをコールバックURLに引き継ぐ単純なリダイレクトを実行しようとしましたが、「無効なクレデンシャル」エラーが発生します。

問題は、oauth2 facebook戦略内でaccess_tokenを取得するための呼び出しで使用されるredirect_uriが、Facebook自体が初期コードを生成するために使用するものに対応していないことだと思いますが、どのように変更する必要があるのか​​わかりませんそれ。

誰かが提案を持っているか、過去にこれを解決しましたか?

価値のあるものとして、私はdevise(1.4)とomniauth(0.3)の古いバージョンを使用していますが、新しいバージョンを使用したとしても、一般的な方向性のヒントで十分です。

4

2 に答える 2

0

ハードコーディングされているため、古いバージョンのomniauthではこれは不可能であることがわかりますredirect_uriが、合理的なトリックは、ユーザーを標準の認証コールバックにリダイレクトすることです(例/auth/facebook/callback)。

これにより、ユーザーが再度認証されますが、ユーザーはすでに資格情報を提供しているため、通過するだけです。

別の方法、そして私がやったことは、OAのFacebook戦略からコードを取得し、使用しているランディングページで、基本的にコードをアクセストークンと交換して、OAuth2機能の一部を再実装することです。

于 2012-09-05T14:13:55.253 に答える
0

コードをトークンと交換する場合、コードは認証された紹介で作成されたものであり、redirect_uri値はユーザーがアクセスしたURLと同じである必要があります。AppCenterのドキュメントにこの影響に関する注記があります。

クエリ文字列設定を使用する際の特別な考慮事項:

App Centerでサーバー側の認証フローを使用する場合は、コードをアクセストークンと交換するときに、redirect_uriパラメーターを正しく渡していることを確認することが重要です。redirect_uriパラメーターをサイトへのクリックスルーURLに設定する必要があります。ほとんどの場合、URLは次のようになります。

http://www.example.com/?fb_appcenter=1&fb_source=search&code=CODE_HERE したがって、redirect_uriを同じ値に設定する必要があります。クリックスルーURLに追加されたクエリパラメータは変更される可能性があるため、このロジックが動的であることを確認してください。

于 2012-07-26T11:50:07.193 に答える