0

タイトルからお察しのとおり、私は OmniAuth を使用してユーザーの現在の Facebook ステータスを取得しようとしています (新しいオプトイン機能用)。omn​​iauth 初期化子内で、必要なスコープ オプションをプロバイダー メソッドに渡しました。私はそれが一口であることを知っています、ごめんなさい。このコードは役立つはずです:

Rails.application.config.middleware.use OmniAuth::Builder do
  provider :facebook, ENV['FACEBOOK_ID'], ENV['FACEBOOK_SECRET'], { scope: 'user_status' }
end

OAuth ダイアログ中に、Facebook がユーザーにステータス メッセージへのアクセスを許可するように求めるため、その部分が機能することはわかっています。したがって、問題は、認証ハッシュでステータスが返され、残りのユーザー情報が返されることを期待していますが、そうではありません。

def callback
  raise request.env['omniauth.auth'].to_yaml
end

はい、それは単純化しすぎていますが、私の before_filters などは気にしないと思います.

私は約2時間グーグルで検索しましたが、私が見つけたすべての例は本当に不自然でした. 範囲をカバーしたものは、許可を要求する方法についてのみ言及しましたが、実際にデータを取得する方法については言及していません.

SO にも同様の未回答の質問がありましたが、あまりにも古いので、復活させるのは良い考えだとは思いませんでした。

助けていただければ幸いです。ありがとう!


7 月 3 日更新:

ご協力いただきありがとうございます!私はあなたのアドバイスを受けて、認証ハッシュからのトークンを使用して、次のようにユーザーの現在のステータスを要求しました。

FbGraph::User.me(@auth[:credentials][:token]).posts.first.message

今後の読者のために:トークンは約 2 か月で期限切れになり、ユーザーがパスワードを変更するたびに期限切れになることに注意することが重要です。トークンの有効期限が近づいたら、ユーザーに通知することができます。FB ドキュメントで収集できたものから、有効期限はUnix Timestampの形式で表されます。これをより便利なものに変換して、Ruby DateTimeのようにすることができます。

expires_at = Time.at(@auth[:credentials][:expires_at]).to_datetime

次に、トークンをモデルに保存して過去に呼び出すことができますか? アプリが無効なトークンを使用しようとしないことを確認します。

do_something unless expires_at.past?
4

2 に答える 2

2

アクセス許可を設定するuser_statusと (そしてユーザーがそれを承認すると)、Facebook はそのユーザーのステータス メッセージを読み取るためのアクセス権をアプリケーションに付与します。認証プロセスではユーザー ステータス メッセージは返されません。ユーザーのステータス更新を取得するには、別の呼び出しを発行する必要があります。

アプリにパーミッションが付与されたら、fb_graphなどの gem を使用して、Facebook に後続のリクエストを行うことができます。これを OmniAuth と統合する方法の例を次に示します。

user = FbGraph::User.new('me', :access_token => session[:omniauth]["credentials"]["token"])
user.fetch

利用できる他の gem はkoalaoauth2です。Facebook で oauth2 を使用する例を次に示します。

于 2012-07-02T01:58:44.350 に答える
1

私の知る限り、ステータス (stati) は認証ハッシュの一部として返されません。トークンを取得したら、これをリクエストする必要があります。例 (koala gem を使用):

api = Koala::Facebook::API.new(auth.credentials.token)
api.get_connections('me', 'statuses').first

Graph エクスプローラーを使用して確認できます。

http://developers.facebook.com/tools/explorer/?method=GET&path=me%2Fstatuses

于 2012-06-29T22:39:43.293 に答える