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