Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

rails google認証導入してユーザー情報を受け取ってからサイトの新規ユーザーとしてuser_idを付与する方法がわかりません

初心者のため説明が下手で伝わりにくい文章ですみません。
よろしくお願いします。

Rails 7.0.3
ruby 3.1.2
deviseなし

解決したいこと

現在Google認証を使ってサイトの新規登録をスムーズに行えるようにコードを組んでいるのですが、
取得したユーザー情報をどう扱えば新規登録が行えるようになるのか知りたいです。

スクリーンショット 2023-02-14 10.33.22.png
スクリーンショット 2023-02-14 10.33.36.png

上の画像のように情報は取得できています
しかし、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

No Answers yet.

Your answer might help someone💌