rails+OmniauthでTwitterログインの実装
railsとOmniauthでTwitterログイン機能を実装しようとしています。
ルーティングエラーが解決せず、困っています。アドバイスなどよろしくお願いします。
Userモデル作成済み。
rails、sqlite3 最新のバージョンを使用しています。
ローカルで開発中です。
発生している問題・エラーメッセージ
No route matches [GET] "/auth/twitter"
該当のソースコード
ruby
1gem 'omniauth' 2gem 'omniauth-twitter' 3 4$bundle install 5 6#/config/initializers/omniauth.rb 7Rails.application.config.middleware.use OmniAuth::Builder do 8 provider :twitter, 'API key', 'API secret' 9end 10 11 12#/app/models/user.rb 13def self.find_or_create_from_auth(auth) 14 provider = auth[:provider] 15 uid = auth[:uid] 16 username = auth[:info][:name] 17 userimage = auth[:info][:image] 18 19 User.find_or_create_by(provider: provider, uid: uid) do |user| 20 user.username = username 21 user.userimage = userimage 22 end 23 end 24 25 26#/app/controllers/users_controller.rb 27def create 28 user = User.find_or_create_from_auth(request.env['omniauth.auth']) 29 session[:current_uid] = user.uid 30 flash[:notice] = "ログインしました" 31 redirect_to("/#{@user.uid}") 32 end 33 34 35#/config/routes.rb 36get 'auth/:provider/callback' => 'users#create' 37 38 39#view 40<%= link_to("ログイン", "/auth/twitter") %> 41
試したこと
Twitter DevelopersのコールバックURLは
http://127.0.0.1:3000/auth/twitter/callback
http://127.0.0.1:3000/auth/twitter
を設定してあります。
WebsiteのURLは127.0.0.1:3000やlocalhost:3000を入力すると、Invalidとなるため適当なURLにしてあります。
users/auth/.....
user/auth/....
でも試してみましたが、変わらずルーティングエラーになります。
リンクを/auth/twitter/callbackとすると
NoMethodError in UsersController#create
undefined method `[]' for nil:NilClass
Extracted source (around line #17):
16 def self.find_or_create_from_auth(auth)
17 provider = auth[:provider]
18 uid = auth[:uid]
19 username = auth[:info][:name]
20 userimage = auth[:info][:image]
と出てきました。
これはローカルなこと、ドメインを取得していないこと、そしてWebsiteURLの設定がローカルで使っているURLと違うことと関係しているのでしょうか?
検索してみたところ、データベースに保存うんぬんはおいといて、Twitterと連携自体は成功している、と書いていた方もいたのですが、ローカルでもエラーなしで実装することはできないのでしょうか。
今回初めてRailsとTwitter APIで開発している初心者です。
アドバイスよろしくお願いいたします。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。