Careerwaveを使ってfacebookログイン時に取得できる画像を保存する方法

スポンサーリンク
Pocket
LINEで送る

画像アップロード機能を簡単に実装できるgemにCareerwaveがあります。

facebookログイン時に取得できる画像をこのライブラリを使って保存する方法の解説です。

 

deviseのoauthログイン機能を使うとfacebookの情報は以下の変数に格納されて渡ってきます。

request.env['omniauth.auth']

 

画像のURLを取得するには

auth = request.env['ominiauth.auth']
auth.info.image

これでアクセスできます。

しかし、これだけではアクセスできない場合があります。

careerwaveでURLから画像を保存するには

remote_カラム名_url = "URL"

としますが、Careerwaveは内部でopen-uriを使っているのでhttpからhttpsにリダイレクトして取得することができません。

ということなのでhttpでアクセスせずにhttpsでアクセスする必要があります。

 

Careerwaveでfacebook画像を保存

やり方は超簡単!

@user = user.new
image_url = auth.info.image.to_s + "?type=large"
@user.remote_image_url = image_url.gsub('http://','https://')
@user.save

これでOK

?type=largeをつけているのはデフォルトで取得できる画像は小さすぎてぼやけてしまうので大きめの画像を取得するためです。

スポンサーリンク

あとは正規表現でhttpをhttpsに変更するだけ

これで画像を保存することができます。