rails google認証導入してユーザー情報を受け取ってからサイトの新規ユーザーとしてuser_idを付与する方法がわかりません
初心者のため説明が下手で伝わりにくい文章ですみません。
よろしくお願いします。
Rails 7.0.3
ruby 3.1.2
deviseなし
解決したいこと
現在Google認証を使ってサイトの新規登録をスムーズに行えるようにコードを組んでいるのですが、
取得したユーザー情報をどう扱えば新規登録が行えるようになるのか知りたいです。
上の画像のように情報は取得できています
しかし、authenticate_userで指定されているページ入ることができずに頭を抱えています。
https://qiita.com/take1457a/items/92f4ff602c1522f1cbf8
https://zenn.dev/batacon/articles/e9b4a88ede2889
この記事を参考に導入しました。
該当するソースコード
gem 'dotenv-rails'
gem 'omniauth-google-oauth2'
gem 'omniauth-rails_csrf_protection'
routes.rb
get 'auth/:provider/callback' => 'users#omniauthcreate'
users_controller.rb
def create
@user = User.new(
name: params[:name],
email: params[:email],
password: params[:password]
)
if @user.save
session[:user_id] = @user.id
#NoticeMailer.greeting(@user).deliver_now
flash[:notice] = "ユーザー登録が完了しました"
redirect_to("/users/#{@user.id}")
else
render("users/new")
end
end
def omniauthcreate
if user = User.find_or_create_from_auth_hash(request.env['omniauth.auth'])
session[:user_id] = user.id
session[:user_name] = user.name
session[:user_email] = user.email
session[:user_image] = user.image
redirect_to ("/posts/index"), notice: "ログインしました。"
else
redirect_to root_path, notice: "失敗しました。"
end
end
user.rb
def posts
return Post.where(user_id: self.id).order(created_at: :desc)
end
def self.find_or_create_from_auth_hash(auth_hash)
provider = auth_hash[:provider]#providerはどのサービスで認証したのかを見分けるもの
uid = auth_hash[:uid]
name = auth_hash[:info][:name]
email = auth_hash[:info][:email]
image = auth_hash[:info][:image]
#find_or_create_by()は()の中の条件のものが見つければ取得し、なければ新しく作成するというメソッド
self.find_or_create_by(provider: provider,uid: uid) do |user|
user.name = name
user.email = email
user.image = image
end
end
login_form.html.erb
<%= button_to "Googleでログイン", "/auth/google_oauth2", method: :post %>
ほかにも必要なコードがあればすぐに追記します。
最後まで読んでいただきありがとうございます。
ご教授いただけると幸いです。
よろしくお願いします。
0 likes