#概要
Rails5にてdevise, omniauthを用いてログイン機能を実装中に起きたエラーの解決方法をまとめました。同じ方法でエラー解決になれば幸いです。
#環境
#使用したgem
gem 'dotenv-rails'
gem 'omniauth-rails_csrf_protection'
gem 'omniauth-facebook'
gem 'omniauth-google-oauth2'
omniauthを使って実装している記事が多いのですが、脆弱性が指摘されているとのことでomniauth-rails_csrf_protectionを使用しています。
公式ドキュメントはこちら
https://github.com/cookpad/omniauth-rails_csrf_protection
参照記事
https://qiita.com/NT90957869/items/2a3ce18dedf93ccf2bdc
#エラーその1 Authentication passthru.
リンクから飛んだ時に表示されるこんな画面。
解決策
Qiita記事の通りやったのにー! なんでだー!
と思いました、はい。
ちゃんとドキュメントを読みましょう。
今回、使っているgemはomniauth-rails_csrf_protectionでした。
公式ドキュメントを読んでみると、methodを指定する必要があるとのこと
You will then need to verify that all links in your application that would initiate OAuth request phase are being converted to a HTTP POST form that contains authenticity_token value. This might simply be done by changing all link_to to button_to, or use link_to ..., method: :post.
ですのでfacebookとかのリンクを以下のようにする必要がありますね
= link_to user_facebook_omniauth_authorize_path , method: :post
#エラーその2 JWT::InvalidIatError
「OSの時間のずれ」が原因だそうです。
omniauth-google-oauth2の公式ドキュメントに以下の記述がありました。
skip_jwt: Skip JWT processing. This is for users who are seeing JWT decoding errors with the iat field. Always try adjusting the leeway before disabling JWT processing.
なので以下のように追記します。
config.omniauth :google_oauth2, ENV['GOOGLE_CLIENT_ID'], ENV['GOOGLE_CLIENT_SECRET'], skip_jwt: true