🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

解決済

1回答

1296閲覧

【Rails6】【Facebook認証】【omniauth+devise】なぜ「self.from_omniauth(auth)メソッド」で「ArgumentError」が発生しているのかわからない件

ShinjiAsai

総合スコア51

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

1グッド

2クリップ

投稿2019/12/14 02:57

前提・実現したいこと

【実現したいこと】
Facebook認証でログインできるようにしたいです。

【前提】
・Rails tutorialの内容を実装済みです。

・以下の記事などを参考にFacebook認証を実装しようとしています。

RailsでFacebook認証する(Devise + OmniAuth)

OmniAuthのgithabのページ

railsでomniauth-facebookを使ってFacebookログインを実装する方法

・環境はRails 6.0、Ruby 2.6.3、Mac OSで、基本最新のGemで実装しています。

発生している問題・エラーメッセージ

実装していたら、以下のエラーが出て先に進めていません。

ArgumentError in Users::OmniauthCallbacksController#facebook wrong number of arguments (given 0, expected 1)

該当のソースコード

User.rbの「self.form_omniauth(auth)」の引数が渡されてないよーというのはなんとなくわかるのですが、いまいちどうしたら渡せるのかよく理解できていないのが現状です。

Ruby

1def self.from_omniauth(auth) 2 where(provider: auth.provider, uid: auth.uid).first_or_create do |user| 3 user.email = auth.info.email 4 user.password = Devise.friendly_token[0, 20] 5 user.name = auth.info.name # assuming the user model has a name 6 user.image_name = auth.info.image # assuming the user model has an image 7 # If you are using confirmable and the provider(s) you use validate emails, 8 # uncomment the line below to skip the confirmation emails. 9 # user.skip_confirmation! 10 end

試したこと

「omniauth」、「devise」、「ArgumentError」、「Facebook認証」などの情報を組み合わせてエラー内容に合う情報を検索しましたが、いまいち理解できませんでした。

これを見たらわかるかもという記事を紹介していただくだけでも構いませんので、知恵を貸してほしいです。お手数お掛けしますが、よろしくお願いします。

退会済みユーザー👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

y_waiwai

2019/12/14 03:12 編集

そのエラーの出ているという行はどれですか? また、エラーメッセージは全文コピペでそのまま提示しましょう
ShinjiAsai

2019/12/14 03:22 編集

早速の回答ありがとうございます。 ・エラーが出ている行について 「該当のソースコード」に記載したコードの「where(provider: auth.provider, uid: auth.uid).first_or_create do |user|」の行がハイライトされて表示されています。 ・エラーメッセージ全文コピペ ArgumentError (wrong number of arguments (given 0, expected 1)): app/models/user.rb:64:in `from_omniauth' app/controllers/users/omniauth_callbacks_controller.rb:34:in `facebook' といった感じです。
ShinjiAsai

2019/12/14 03:25 編集

omniauth_callbacks_controller.rbに記載している内容は以下の通りです。 def facebook @user = User.from_omniauth(request.env["omniauth.auth"]) if @user.persisted? sign_in_and_redirect @user, event: :authentication set_flash_message(:notice, :success, kind: "Facebook") if is_navigational_format? else session["devise.facebook_data"] = request.env["omniauth.auth"] redirect_to new_user_registration_url end end
winterboum

2019/12/14 08:57

これらがどの行なのか判るようにしていただけますか app/models/user.rb:64:in `from_omniauth' app/controllers/users/omniauth_callbacks_controller.rb:34:in `facebook'
guest

回答1

0

自己解決

まず最初に質問に対して回答いただいた方、返信が遅くなってしまい、申し訳ありませんでした。

結論から言うと、「deviseのUserモデル」と「手動で作ったUserモデル」がコンフリクトしていたようです。ただ原因は、はっきりとわかっていません。
よくわからなくなっていたため、いちから作り直しました。deviseを使わずに「omniauth」のみを用いて、Facebook認証を作ったところ正常に動作しました。

回答いただいた方、改めてありがとうございました。

投稿2019/12/20 10:51

ShinjiAsai

総合スコア51

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問