今回は、自分がrailsでgoogle認証を実装するときにハマったことをまとめたので参考にでも。
自分がGoogle認証を実装するときに参考にした記事 ↓
[Rails] Facebook/Twitter/Googleでのユーザー登録をDevise & Omniauthを使って爆速で実装する
##エラー 400: invalid_request Missing required parameter: client_id
まず1つ目。グーグル認証のページでアカウントを選択肢して認証しようとしたときに出たエラーです。
client_idがないと言われました。
原因は2つあり
①スペースを入れていた
②.envを使わずそのままキーを入れていたこと
①スペース
config.omniauth :google_oauth2, ENV['GOOGLE_CLIENT_ID'] ,ENV['GOOGLE_CLIENT_SECRET'], skip_jwt: true
から
config.omniauth :google_oauth2,ENV['GOOGLE_CLIENT_ID'],ENV['GOOGLE_CLIENT_SECRET'],skip_jwt: true
に変更しました。スペースがいらなかったみたいです。参考サイトではスペースはありました。
②.envを使わずそのままキーを入れていたこと
これは他のサイトを見る限りそのままでも行けた人がいるみたいですが僕の環境ではだめでした。
どうしても解決しない人はgem 'dotenv-rails'をいれてやってみてください。
##メール認証がされていません
その次に出たのがこのエラー
普通にやるとメール認証がされていませんと表示されてしまいます。これは
class Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController
# callback for google
def google_oauth2
callback_for(:google)
end
# common callback method
def callback_for(provider)
@user = User.from_omniauth(request.env["omniauth.auth"])
@user.skip_confirmation! ←これと
@user.save! ←これ!
if @user.persisted?
sign_in_and_redirect @user, event: :authentication #this will throw if @user is not activated
set_flash_message(:notice, :success, kind: "#{provider}".capitalize) if is_navigational_format?
else
session["devise.#{provider}_data"] = request.env["omniauth.auth"].except("extra")
redirect_to new_user_registration_url
end
end
def failure
redirect_to root_path
end
end
@user.skip_confirmation!
@user.save!
をコントローラーに入れることで解決しました。
####ぷち宣伝
公開日記というアプリを作りました。日記を公開できるアプリです(公開しないことも可)使っている人が僕しかいません(泣)。ほぼ毎日更新しているのでみてください。お願いします。
URL: https://public-diary.herokuapp.com/
##まとめ
実は僕はいままで4回くらいsns認証を実装しようとし失敗しを繰り返しています。今回始めて出来たのですができたときはかなり嬉しかったです。ここまで見てくださりありがとうございました。