Ruby(Rails)を使ってオリジナルアプリを作っていて、Twitter認証機能を実装しようと下記の記事などを参考に実践してみたところTwitter認証画面までは実装できたのですが、ログインができずエラーが出てしまうという状況に陥ってしまいました
発生している問題・エラーメッセージ
NoMethodError in UsersController#create undefined method `find_or_create_from_auth_hash' for #<Class:0x00007fe9b459c3b0> Did you mean? find_or_create_by user = User.find_or_create_from_auth_hash(request.env['omniauth.auth']) if user session[:user_id] = user.id redirect_to '/posts/index', notice: "ログインしました。"
というようなエラーが発生しています
NoMethodErrorなのでなんらかのメゾットが定義されていないということなのだと思うのですがClass:0x00007fe9b459c3b0というのが何を表しているのかが皆目見当もつきません
該当のソースコード
**models/twitter.rb** class User < ApplicationRecord def self.find_or_create_from_auth_hash(auth_hash) provider = auth_hash[:provider] #providerはどのサービスで認証したのかを見分けるもの uid = auth_hash[:uid] name = auth_hash[:info][:name] image_url = auth_hash[:info][:image] #find_or_create_by()は()の中の条件のものが見つければ取得し、なければ新しく作成するというメソッド self.find_or_create_by(provider: provider,uid: uid) do |user| user.username = name user.image_url = image_url end end end
**controllers/users_controller.rb** def create @user = User.new( name: params[:name], email: params[:email], image_name: "pile-up3.jpg", password: params[:password] ) if @user.save session[:user_id] = @user.id redirect_to("/users/#{@user.id}") else render("users/new") end user = User.find_or_create_from_auth_hash(request.env['omniauth.auth']) if user session[:user_id] = user.id redirect_to '/posts/index', notice: "ログインしました。" else redirect_to root_path, notice: "失敗しました。" end end
Twitter認証機能を実装したことでなんらかのエラーが発生したことが予想されるのでTwitter認証機能実装時に追加したコードを上記しておきましたが、正直何が原因でこうなってしまったのかがわからないのでこれ以外のコードがみたいという方は質問欄にてお申し付けください
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/02/12 07:59
2020/02/12 08:27