1

ローカルホストで完璧に動作するRailsによるFacebookログイン機能付きのアプリケーションを作成しましたが、現在はHerokuでは動作しません。それは誰もが得る共通の問題のように見えるが、過去の質問や他の記事のどれも助けなかった。herokuのomniauthによるFacebookのログインは機能していません

error image

上記のリンクはエラー・イメージになります。私はStripeを扱っているときに同じエラーを見たので、それはHerokuしかしFacebookから来るべきです。このエラーが気になる前に、FacebookからCan't Load URL: The domain of this URL isn't included in the app's domains. To be able to load this URL, add all domains and subdomains of your app to the App Domains field in your app settings.という別のエラーがありましたが、FacebookのアプリページにHeroku URLを追加して解決しました。

私はfigaro heroku:set -e productionでしたので、アプリキーと秘密のマッシュがヘロクに設定されています。

ここに私のファイルのいくつかのコードがあります。

設定/初期化子/ devise.rb

config.omniauth :facebook, ENV["facebook_app_id"], ENV["facebook_app_secret"], scope: 'email', info_fields: 'email,name', secure_image_url: true 

アプリ/モデル/ user.rb

def self.from_omniauth(auth) 
    where(provider: auth.provider, uid: auth.uid).first_or_create do |user| 
    user.email = auth.info.email 
    user.password = Devise.friendly_token[0,20] 
    user.name = auth.info.name # assuming the user model has a name 
    user.image = "http://graph.facebook.com/#{auth.uid}/picture?type=large" # assuming the user model has an image 
    # If you are using confirmable and the provider(s) you use validate emails, 
    # uncomment the line below to skip the confirmation emails. 
    # user.skip_confirmation! 
    end 
end 

コントローラ/ユーザ/ omniauth_callback_controller.rb

class Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController 
    def facebook 
    # You need to implement the method below in your model (e.g. app/models/user.rb) 
    @user = User.from_omniauth(request.env["omniauth.auth"]) 

    if @user.persisted? 
     sign_in_and_redirect @user, :event => :authentication #this will throw if @user is not activated 
     set_flash_message(:notice, :success, :kind => "Facebook") if is_navigational_format? 
    else 
     session["devise.facebook_data"] = request.env["omniauth.auth"] 
     redirect_to new_user_registration_url 
    end 
    end 

    def failure 
    redirect_to root_path 
    end 
end 

Herokuのログ

2017-07-17T15:33:54.234171+00:00 app[web.1]: Started GET "https://stackoverflow.com/users/auth/facebook/callback?code=AQCoKbzr4 ///// 00703" for 150.116.22.144 at 2017-07-17 15:33:54 +0000 
2017-07-17T15:33:54.236011+00:00 app[web.1]: I, [2017-07-17T15:33:54.235951 #4] INFO -- omniauth: (facebook) Callback phase initiated. 
2017-07-17T15:33:54.360053+00:00 app[web.1]: Processing by Users::OmniauthCallbacksController#facebook as HTML 
2017-07-17T15:33:54.360097+00:00 app[web.1]: Parameters: {"code"=>"AQCoKbzr4nv6c7BEpM ///// 86c27a00703"} 
2017-07-17T15:33:54.371557+00:00 app[web.1]: User Load (1.8ms) SELECT "users".* FROM "users" WHERE "users"."provider" = $1 AND "users"."uid" = $2 ORDER BY "users"."id" ASC LIMIT 1 [["provider", "facebook"], ["uid", "102081518247"]] 
2017-07-17T15:33:54.581790+00:00 heroku[router]: at=info method=GET path="https://stackoverflow.com/users/auth/facebook/callback?code=AQCoK ///// a00703" host=xxxxxxx-xxxx-xxxxx.herokuapp.com request_id=93945-1199-417e-8d98-ede264cb fwd="150.116.22.144" dyno=web.1 connect=1ms service=350ms status=500 bytes=1754 protocol=https 
2017-07-17T15:33:54.578410+00:00 app[web.1]: Completed 500 Internal Server Error in 218ms (ActiveRecord: 3.0ms) 
2017-07-17T15:33:54.579175+00:00 app[web.1]: 
2017-07-17T15:33:54.579178+00:00 app[web.1]: RuntimeError (redirection forbidden: http://graph.facebook.com/102087018247/picture?type=large -> https://scontent.xx.fbcdn.net/v/t1.0-1/p200x200/13064_10202475740292_410664266178542_n.jpg?oh=ef118e9d947604c9c7055a92e2&oe=5A02F8B4): 
2017-07-17T15:33:54.579178+00:00 app[web.1]: app/models/user.rb:18:in `block in from_omniauth' 
2017-07-17T15:33:54.579179+00:00 app[web.1]: app/models/user.rb:14:in `from_omniauth' 
2017-07-17T15:33:54.579180+00:00 app[web.1]: app/controllers/users/omniauth_callbacks_controller.rb:4:in `facebook' 
2017-07-17T15:33:54.579180+00:00 app[web.1]: 
2017-07-17T15:33:54.579181+00:00 app[web.1]: 

HerokuログのRuntimeErrorが何を意味するのかわかりません。何か手がかりやアドバイスをいただければ幸いです。

答えて

0

イメージURLがユーザーを別のURLにリダイレクトするため、リダイレクトエラーが発生しました。 httpをhttpsにリダイレクトすると、open-uriに制限があります。あなたの画像のURL

"https://graph.facebook.com/#{auth.uid}/picture?type=large" 

にhttpsでHTTPを交換するか、この方法を使用することによりhttp://graph.facebook.com/102087018247/picture?type=largehttps://scontent.xx.fbcdn.net/v/t1.0-1/p200x200/13064_10202475740292_410664266178542_n.jpg?oh=ef118e9d947604c9c7055a92e2&oe=5A02F8B4

あなたがこの問題を回避することができますにリダイレクトされます:あなたは次のURLを参照してくださいすることができ、エラーメッセージでは

user.remote_image_url = auth.info.image.gsub(/\Ahttp:/, "https") 
+0

さんが追加されました!ありがとう! – ymatt

+0

あなたは大歓迎です:)正しい答えとして答えをマークできましたか? –

+0

私はちょうど左側のチェック記号をタップしました。私はここに新しいですが、これがマークする方法であることを願っていますか? – ymatt

0

Facebook Developers Consoleでプロダクションアプリケーションドメインをホワイトリストに追加してください。

私は通常、自分のデフォルトのアプリケーションからサブテストアプリケーションをセットアップし、テストアプリケーションは独自のキーを持ち、ENVを設定してlocalhostをホワイトリストに登録します。この方法で開発が容易になります

次に、Herokuドメインがホワイトリストに登録されているAppとHerokuの中にプロダクションアプリ用のENVを設定します。コールバックは、あなたが

をホワイトリスト1に一致する、Herokuの生産ドメインが含まれていることを確認

その後ところで方法は、あなたのイメージにアクセスする(この1つは私のために頻繁に動作します)

heroku run rake db:migrate 

Herokuのにプッシュした後、Herokuのデータベースを移行します私はそれをやった方法とは異なります。

user.remote_avatar_url = auth.info.image 

これがうまくいかない場合は、教えてください。自分の時間にHerokuでFacebookのログイン情報を設定しました。

+0

他の回答が最も簡単な方法のように見えましたが、私はあなたのアドバイスを感謝します! – ymatt

関連する問題