前提・実現したいこと
Rails5でtwitter認証機能をつけようとしているのですが、認証画面に遷移後(認証画面は表示されます。)NameErrorが発生し、先に進みません。
webにあがっているものはほとんど試し尽くし、成すすべがなくなってしまったため質問させていただきました。
発生している問題・エラーメッセージ
NameError(undefined local variable or method ` self' for #<Class:0x0a18a730>): app/models/user.rb:14:in `find_or_create_from_auth_hash' app/controllers/users_controller.rb:15:in `create'
該当のソースコード
ruby
1 #routes.rb 2Rails.application.routes.draw do 3、 4、 5 # 省略 6、 7、 8 9 get 'auth/:provider/callback' => 'users#create' 10end
ruby
1#omniauth.rb 2Rails.application.config.middleware.use OmniAuth::Builder do 3 provider :twitter, ENV['TWITTER_CONSUMER_KEY'], ENV['TWITTER_CONSUMER_SECRET'] 4end
ruby
1#user.rb 2class User < ApplicationRecord 3、 4、 5 #省略 6、 7、 8def self.find_or_create_from_auth_hash(auth_hash) 9 provider = auth_hash[:provider] 10 uid = auth_hash[:uid] 11 nickname = auth_hash[:info][:nickname] 12 image_url = auth_hash[:info][:image] 13 14 self.find_or_create_by(provider: provider,uid: uid) do |user| 15 user.username = nickname 16 user.image_url = image_url 17 end 18 end 19 20end 21
ruby
1#users_controller.rb 2class UsersController < ApplicationController 3、 4、 5#省略 6、 7、 8 def create 9 user = User.find_or_create_from_auth_hash(request.env['omniauth.auth']) 10 session[:user_id] = user.id 11 redirect_to root_path, notice: "ログインしました。" 12 end 13end
#secrets.yml default_twitter: &default_twitter twitter_api_key: <%= ENV["TWITTER_CONSUMER_KEY"] %> twitter_api_secret: <%= ENV["TWITTER_CONSUMER_SECRET"] %> development: secret_key_base: #略 <<: *default_twitter test: secret_key_base: #略 <<: *default_twitter production: secret_key_base: <%= ENV["SECRET_KEY_BASE"] %> twitter_api_key: <%= ENV["TWITTER_CONSUMER_KEY"] %> twitter_api_secret: <%= ENV["TWITTER_CONSUMER_SECRET"] %>
#/.env TWITTER_CONSUMER_KEY = #略 TWITTER_CONSUMER_SECRET = #略
試したこと
Callback URLには記入済みです。
UserModelも作成しています。
補足情報(FW/ツールのバージョンなど)
いろいろ調べてエラーが似ているため原因と予想できるのは、前に一度deviseを入れた後に自分のやりたかったことが出来なかったため削除したことがあるのですが、そのときにうまく削除出来ず残っているdeviseのファイルが悪さをしているという可能性が考えられます。
deviseのファイルは調べながらすべて消しましたが、deviseが原因と考えられる場合正しい削除の方法を教えていただければと思います。
よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー