0

ユーザーの情報へのアクセス許可を要求する URL にユーザーをリダイレクトしようとしています。

アクションが次のフォームのビューがあります。

class AuthController < ApplicationController

   def auth
     @oauth = Koala::Facebook::OAuth.new("*id*", "*secret*", 'http://localhost:3000/auth/auth2') 
     address = @oauth.url_for_oauth_code(:permissions => "publish_stream")
     puts "address  #{address}"
     redirect_to address
     return  
   end

   def auth2

   end

end

ではstdout、住所は次のように表示されます。Redirected to https://graph.facebook.com/oauth/authorize?client_id=*id*&redirect_uri=http://localhost:3000/auth/auth2&scope=publish_stream

この URL を (アプリではなく) ブラウザーにスタンドアロンで入力すると、アプリがアクセス許可を要求する正しいページに移動します。ただし、アプリケーションを介して、アクセス許可を要求するページではなく、Facebook のロゴを表示するページに移動します。

アクセス許可ページが表示されることを期待していましたが、ユーザーが許可すると、リクエストがredirect_uriに転送されます。

4

3 に答える 3

0

リダイレクトに fbml を使用していますか、それともサーバー側で実行しようとしていますか? アプリがキャンバス ページで、サーバー側をリダイレクトしている場合、ユーザーではなく facebook のみをリダイレクトしています。実際に Facebook にリダイレクトを行うように指示していることを確認する必要があります。

その場合は、fb:redirectを確認してください。

于 2011-05-29T20:06:18.997 に答える
0

質問への回答を投稿したかっただけです。解決策は実際には非常に簡単でした。コントローラーで承認 uri へのリダイレクトを行う代わりに、次のように自分のビューでそれを行う必要がありました。これにより、中間のログイン ページが回避され、この特定の問題に遭遇した他のすべての人が行っていることのようです (ユーザーを認証ページに直接渡す代わりに、中間の Facebook ページが提供されます)。

<スクリプト言語=JavaScript>
top.location.href="https://graph.facebook.com/oauth/authorize?client_id=client_id&redirect_uri=http://localhost:3000/xxx&scope=publish_stream";
</script>

なぜそれが重要なのか理解できず、コントローラーでリダイレクトできません。そのため、RoR を使用している人が理由を説明できる場合は、お知らせください。

于 2011-05-31T05:39:28.063 に答える
0

最近、同様の問題に遭遇しました。アプリを iframe から切り離し、レールのサーバー側リダイレクトから認証ページにリダイレクトするには、次のようにします。

def facebook_authorization
  redirect_url =<<-EOS
    <script>
      top.location.href='https://graph.facebook.com/oauth/authorize?client_id=client_id&redirect_uri=http://localhost:3000/xxx&scope=publish_stream';
    </script>
   EOS       

   render :inline => redirect_url
end

これは、Facebook のドキュメントで php を使用して説明されている方法とほとんど同じです。

さらに、ユーザーがアプリを承認すると、signed_request 応答パラメーターで oauth_access トークンを取得します。私はコアラを使用していないので、署名されたリクエストをどのように解析するのかわかりません。

テストの結果、ユーザーがアプリを承認している限り、リクエストごとに Facebook から oauth_access トークンが返されることがわかりました。これにより、ユーザーがアプリを承認したかどうかを簡単に検出でき、ユーザーがアプリにアクセスするたびに認証ページを送信する必要がなくなります。

于 2011-09-04T18:22:59.293 に答える