質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.48%
Devise

Deviseとは、Ruby-on-Railsの認証機能を追加するプラグインです。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Twitter

Twitterは、140文字以内の「ツイート」と呼ばれる短文を投稿できるサービスです。Twitter上のほぼ全ての機能に対応するAPIが存在し、その関連サービスが多く公開されています。

Ruby on Rails

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

ログイン

ログインは、ユーザーがコンピューターシステムにアクセスするプロセスの事を呼びます。

Q&A

解決済

1回答

1735閲覧

DeviseのOmniauthがうまく動かないくてつらい

koh-s

総合スコア9

Devise

Deviseとは、Ruby-on-Railsの認証機能を追加するプラグインです。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Twitter

Twitterは、140文字以内の「ツイート」と呼ばれる短文を投稿できるサービスです。Twitter上のほぼ全ての機能に対応するAPIが存在し、その関連サービスが多く公開されています。

Ruby on Rails

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

ログイン

ログインは、ユーザーがコンピューターシステムにアクセスするプロセスの事を呼びます。

0グッド

0クリップ

投稿2020/04/21 17:25

編集2020/04/21 17:26

前提・実現したいこと

deviseのtwitter認証機能を実装する際にターミナルで下記の様にOmniauthがうまく機能してくれないエラーに遭遇してしまいました。

devise実装に使用した記事はこちら

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

ec2-user:~/environment/blog_app (master) $ rails s => Booting Puma => Rails 5.1.7 application starting in development => Run `rails server -h` for more startup options Exiting Traceback (most recent call last): 103: from bin/rails:3:in `<main>' 102: from bin/rails:3:in `load' 101: from /home/ec2-user/environment/blog_app/bin/spring:15:in `<top (required)>' 100: from /home/ec2-user/environment/blog_app/bin/spring:15:in `require' 99: from /home/ec2-user/.rvm/gems/ruby-2.6.3/gems/spring-・・・ ・・・・・ ・・・・ ・・・ ・・ 5.1.7/lib/action_dispatch/routing/route_set.rb:588:in `add_route': Invalid route name, already in use: 'new_user_session' (ArgumentError) You may have defined two routes with the same name using the `:as` option, or you may be overriding a route already defined by a resource with the same naming. For the latter, you can restrict the routes created with `resources` as explained here: http://guides.rubyonrails.org/routing.html#restricting-the-routes-created

ruby

1class User < ApplicationRecord 2 # Include default devise modules. Others available are: 3 # :confirmable, :lockable, :timeoutable, :trackable and :omniauthable 4 devise :database_authenticatable, :registerable, 5 :recoverable, :rememberable, :trackable, :validatable, 6 :confirmable, :lockable, :timeoutable, :omniauthable, omniauth_providers: [:twitter] 7 8 has_one :profile, dependent: :destroy 9 10 def self.from_omniauth(auth) 11 where(provider: auth["provider"], uid: auth["uid"]).first_or_create do |user| 12 user.provider = auth["provider"] 13 user.uid = auth["uid"] 14 user.username = auth["info"]["nickname"] 15 end 16 end 17 18 def self.new_with_session(params, session) 19 if session["devise.user_attributes"] 20 new(session["devise.user_attributes"], without_protection: true) do |user| 21 user.attributes = params 22 user.valid? 23 end 24 else 25 super 26 end 27 end 28end

ruby

1[routes.rb] 2Rails.application.routes.draw do 3 devise_for :users 4 resources :articles 5 devise_for :users, controllers: { :omniauth_callbacks => "users/omniauth_callbacks" } 6 root 'articles#index' 7 # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html 8end

ruby

1[Omniauth_callback_controller.rb] 2class OmniauthCallbacksController < Devise::OmniauthCallbacksController 3 def twitter 4 @user = User.from_omniauth(request.env["omniauth.auth"].except("extra")) 5 6 if @user.persisted? 7 flash.notice = "ログインしました!" 8 sign_in_and_redirect @user 9 else 10 session["devise.user_attributes"] = @user.attributes 11 redirect_to new_user_registration_url 12 end 13 end 14end

試したこと

グーグルを放浪し、下記の記事に記載されている内容を試みてみるも、解決に至らず、苦戦しています。
https://tisnote.com/rails5-devise-omniauth/
https://qiita.com/SpicyCoffee/items/546169569308152375e4

大変恐れ入りますが、何卒お力添えをお願い致します。

補足情報(FW/ツールのバージョンなど)

rails 5.1.6
em 'devise'
gem 'omniauth-twitter'

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

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

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

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

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

guest

回答1

0

自己解決

今回のオチ。

ruby

1 Invalid route name, already in use: 'new_user_session' (ArgumentError) 2You may have defined two routes with the same name using the `:as` option, or you may be overriding a route already defined by a resource with the same naming. For the latter, you can restrict the routes created with `resources` as explained here: 3http://guides.rubyonrails.org/routing.html#restricting-the-routes-created

これを訳してみると↓

`:as`オプションを使用して同じ名前の2つのルートを定義したか、同じ名前のリソースによって既に定義されているルートを上書きしている可能性があります。 後者の場合、ここで説明するように、 `resources`で作成されたルートを制限できます。 http://guides.rubyonrails.org/routing.html#restricting-the-routes-created `:as`オプションを使用して同じ名前の2つのルートを定義したか、同じ名前のリソースによって既に定義されているルートを上書きしている可能性があります。 後者の場合、ここで説明するように、 `resources`で作成されたルートを制限できます。

https://guides.rubyonrails.org/routing.html#restricting-the-routes-created

そうです。routes.rbが原因。

ruby

1[routes.rb] 2Rails.application.routes.draw do 3 devise_for :users 4 resources :articles 5 devise_for :users, controllers: { :omniauth_callbacks => "users/omniauth_callbacks" } 6 root 'articles#index' 7 # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html 8end

devise_for :usersがなぜか二つある...。

エラー文をしっかり読みましょう。

投稿2020/04/22 02:53

koh-s

総合スコア9

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問