Search code examples
ruby-on-railsruby-on-rails-4deviseroutesomniauth

Routes not changing upon editing controller


I'm configuring devise to work with two omniauth providers: twitter and github. Having implimented github first, I created a github method in my OmniauthCallbacksController. Deciding later that I wanted to use twitter as well, I reconfigured my controller, discarding the github method in favor of a more sophisticated implementation for both providers.

The Problem is that when I run rake routes, the old github method is all that appears and it seems that my changes to the controllers haven't even been recognized. I can even delete everything out of the controller and my rake routes result is left unchanged. I've attached the relevant files below. Many thanks in advance for any insight you can give me.

My routes file is below (note the existence of the now nonexistent users/omniauth_callbacks#github method):

Rails.application.routes.draw do

  resources :issues
  resources :submissions
  resources :home

  devise_for :users, :controllers => { :omniauth_callbacks => "users/omniauth_callbacks" }
  match '/users/:id/finish_signup' => 'users#finish_signup', via: [:get, :patch], :as => :finish_signup

  root to: "home#index"
end

When I run rake:routes, I get the following:

$ rake routes
                        Prefix Verb      URI Pattern                           Controller#Action
                        issues GET       /issues(.:format)                     issues#index
                               POST      /issues(.:format)                     issues#create
                     new_issue GET       /issues/new(.:format)                 issues#new
                    edit_issue GET       /issues/:id/edit(.:format)            issues#edit
                         issue GET       /issues/:id(.:format)                 issues#show
                               PATCH     /issues/:id(.:format)                 issues#update
                               PUT       /issues/:id(.:format)                 issues#update
                               DELETE    /issues/:id(.:format)                 issues#destroy
                   submissions GET       /submissions(.:format)                submissions#index
                               POST      /submissions(.:format)                submissions#create
                new_submission GET       /submissions/new(.:format)            submissions#new
               edit_submission GET       /submissions/:id/edit(.:format)       submissions#edit
                    submission GET       /submissions/:id(.:format)            submissions#show
                               PATCH     /submissions/:id(.:format)            submissions#update
                               PUT       /submissions/:id(.:format)            submissions#update
                               DELETE    /submissions/:id(.:format)            submissions#destroy
                    home_index GET       /home(.:format)                       home#index
                               POST      /home(.:format)                       home#create
                      new_home GET       /home/new(.:format)                   home#new
                     edit_home GET       /home/:id/edit(.:format)              home#edit
                          home GET       /home/:id(.:format)                   home#show
                               PATCH     /home/:id(.:format)                   home#update
                               PUT       /home/:id(.:format)                   home#update
                               DELETE    /home/:id(.:format)                   home#destroy
user_github_omniauth_authorize GET|POST  /users/auth/github(.:format)          users/omniauth_callbacks#passthru
 user_github_omniauth_callback GET|POST  /users/auth/github/callback(.:format) users/omniauth_callbacks#github
              new_user_session GET       /users/sign_in(.:format)              devise/sessions#new
                  user_session POST      /users/sign_in(.:format)              devise/sessions#create
          destroy_user_session DELETE    /users/sign_out(.:format)             devise/sessions#destroy
                 user_password POST      /users/password(.:format)             devise/passwords#create
             new_user_password GET       /users/password/new(.:format)         devise/passwords#new
            edit_user_password GET       /users/password/edit(.:format)        devise/passwords#edit
                               PATCH     /users/password(.:format)             devise/passwords#update
                               PUT       /users/password(.:format)             devise/passwords#update
      cancel_user_registration GET       /users/cancel(.:format)               devise/registrations#cancel
             user_registration POST      /users(.:format)                      devise/registrations#create
         new_user_registration GET       /users/sign_up(.:format)              devise/registrations#new
        edit_user_registration GET       /users/edit(.:format)                 devise/registrations#edit
                               PATCH     /users(.:format)                      devise/registrations#update
                               PUT       /users(.:format)                      devise/registrations#update
                               DELETE    /users(.:format)                      devise/registrations#destroy
                 finish_signup GET|PATCH /users/:id/finish_signup(.:format)    users#finish_signup
                          root GET       /                                     home#index

And my new Oauth callbacks controller looks like this:

class OmniauthCallbacksController < Devise::OmniauthCallbacksController
  def self.provides_callback_for(provider)
    class_eval %Q{
      def #{provider}
        @user = User.find_for_oauth(env["omniauth.auth"], current_user)

        if @user.persisted?
          sign_in_and_redirect @user, event: :authentication
          set_flash_message(:notice, :success, kind: "#{provider}".capitalize) if is_navigational_format?
        else
          session["devise.#{provider}_data"] = env["omniauth.auth"]
          redirect_to new_user_registration_url
        end
      end
    }
  end

  [:twitter, :github].each do |provider|
    provides_callback_for provider
  end

  def after_sign_in_path_for(resource)
    if resource.email_verified?
      super resource
    else
      finish_signup_path(resource)
    end
  end
end

Solution

  • Figured it out! Turns out the issue wasn't with any of the files I posted. In the User model, I had the following line: omniauth_providers: [:github] I needed to add twitter to it.