Matthew
Matthew

Reputation: 137

Rails 4 Devise + Omniauth Github Routing Error

I'm using Rails 4.1.1 and I'm trying to create omniauth github with my devise gem in my application. But I get routing error, I'm following Railscast #235 revised on this topic.

Right now, I'm trying to do the same thing Ryan Bates is doing, which is raise omniauth.auth as a yaml to the screen, but I get the error:

No route matches [GET] "/auth/github/callback"

How do I fix this error?

Here you have my routes:

Rails.application.routes.draw do
  devise_for :users, controllers: {omniauth_callbacks: "omniauth_callbacks"}

  root to: 'questions#index'

  resources :questions do
    resources :answers, only: [:create]
  end

  resources :users, only: [:show]

  #USERS CONTROLLER MY ROUTES
  get "adding_likes/(:id)/(:like)/(:current_user_id)", to: "answers#adding_likes", as: :adding_likes
  get "add_accept/(:answer_id)", to: "answers#accept", as: :accept
  get "leaderboard", to: "users#leaderboard", as: :leaderboard
end

My controller:

class OmniauthCallbacksController < Devise::OmniauthCallbacksController
  def all
    raise request.env["omniauth.auth"].to_yaml
  end
  alias_method :github, :all
end

My user model:

class User < ActiveRecord::Base
  # Include default devise modules. Others available are:
  # :confirmable, :lockable, :timeoutable, :omniauthable
  # :recoverable, :rememberable and :trackable
  devise :database_authenticatable, :registerable, :validatable, :omniauthable
  has_attached_file :avatar, :styles => { :small => "100x100>" }
  validates_attachment_content_type :avatar, :content_type => /\Aimage\/.*\Z/

  # has_attached_file :superstarbadge, :styles => { :small => "100x100>" } 
  # validates_attachment_content_type :superstarbadge, :content_type => /\Aimage\/.*\Z/

  has_many :questions
  has_many :answers

  def to_s
    email
  end
end

Important part of my devise.rb

config.omniauth :github,NOT-VISIBILE,IN-HERE

Upvotes: 0

Views: 680

Answers (1)

Finks
Finks

Reputation: 1681

Basically, you haven't added the routes for it. I think you've missed Ryan add it to his routes file. Just add this:

get "/auth/github/callback" => "yourController#yourAction"

but since you're using omniauth, it's better this way

get "/auth/:provider/callback" => "yourController#yourAction

And add the necessary views for it.

Upvotes: 0

Related Questions