認証時に便利なgemファイル「Devise」を使っていた際に、ハマりました。
2年以上前から、このライブラリを使ってきたのですが、FacebookがHTTPS通信を必須したのにも影響あってか一筋縄では実装できなくなっていたので、備忘録的に残しておきます。
ちなみに、開発環境では問題なく通ったけど、本番でハマったので厄介でした。
- Deviseのデフォルトになっている「user_facebook_omniauth_authorize_path」はどうやっても、SSLにはできなかったので、今回別にURLをヘルパーで設定することにしました。
registrations.new.html.erb
<!-- <%= link_to user_facebook_omniauth_authorize_path do %> -->
<%= link_to facebook_url do %>
<div class="btnFacebook">
<span>
<i class="fab fa-facebook"></i> Signin with Facebook
</span>
</div>
<% end %>
application_helper.rb
module ApplicationHelper
def facebook_url
case Rails.env
when "development"
"https://www.facebook.com/dialog/oauth?client_id=(クライアントID)&redirect_uri=https%3A%2F%2Flocalhost:3000%2Fusers%2Fauth%2Ffacebook%2Fcallback&scope=email"
when "production"
"https://www.facebook.com/dialog/oauth?client_id=(クライアントID)&redirect_uri=https%3A%2F%2F(ドメイン名)%2Fusers%2Fauth%2Ffacebook%2Fcallback&scope=email"
end
end
- FacebookのomniauthのコールバックURLを指定する
devise.rb
・・・
config.omniauth :facebook,
Rails.application.credentials[Rails.env.to_sym][:facebook][:app_id],
Rails.application.credentials[Rails.env.to_sym][:facebook][:app_secret],
provider_ignores_state: true,
callback_url: 'https://(ドメイン名)/users/auth/facebook/callback'
・・・
CloudflareでAlways HTTPSしていたからかもしれませんが、関係ないかもしれません。。
いつもスムーズに行くところでハマると、思いがけない工数が発生して焦りますよね。