ユーザーが自分のFacebookアカウントをリンクできるアプリケーションがあります。メールを使用してログインできますが、Facebookアカウントをリンクすることはできます。
リンクされたソーシャルネットワーク(Facebookなど)を表示すると、次のようになります。
<%= image_tag @facebook.get_facebook_picture %>
これにより、次のようなインスタンスメソッドが呼び出されます。
def get_facebook_picture
unless self.token.nil?
facebook_graph = Koala::Facebook::GraphAPI.new(self.token)
fb_picture = facebook_graph.get_picture("me", { :type => "small" })
end
end
これは、DBに保存したFacebookトークンの有効期限が切れていない限りうまく機能します。したがって、前述のコントローラーにこの例外ハンドラーを追加しました。
def facebook_exception_handler exception
if exception.fb_error_type.eql? 'OAuthException'
# Let's get a new auth token... How?
else
logger.debug "Damn it. We don't know what error is coming from FB"
raise exception
end
end
例外を正しくキャッチしましたが、データベースにあるアクセストークンをどのように更新するのかわかりません。OmniAuthを使用して挿入されたアクセストークンに注意してください。だから私の質問は:
を持っている場合、 OmniauthOAuthException
を使用して特定のユーザー(UID)のアクセストークンを更新するにはどうすればよいですか?