Jose Sanchez
Jose Sanchez

Reputation: 15

Error Ruby on Rails: Users::OmniauthCallbacksController#facebook is missing a template for this request format and variant

I'm trying to add an external login with facebook, but whenever I realize the home page correctly directs me to the facebook page, but then I get the following error, and could not understand what it can be.

"Users::OmniauthCallbacksController#facebook is missing a template for this request format and variant. request.formats: ["text/html"] request.variant: [] NOTE! For XHR/Ajax or API requests, this action would normally respond with 204 No Content: an empty white screen. Since you're loading it in a web browser, we assume that you expected to actually render a template, not nothing, so we're showing an error to be extra-clear. If you expect 204 No Content, carry on. That's what you'll get from an XHR or API request. Give it a shot."

          "That's what you'll get from an XHR or API request. Give it a shot."

        raise ActionController::UnknownFormat, message
          else
        logger.info "No template found for #{self.class.name}\##{action_name}, rendering head :no_content" if logger
        super

this is my controller

class Users::OmniauthCallbacksController < ApplicationController
  def facebook
    @User = User.from_omniauth(request.env["omniauth.auth"])
    if @User.persisted?
      @User.remember_me = true
      sign_in_and_redirect @User, event: :authentication
    end
  end

end

this is the user model.

class User < ActiveRecord::Base
  # Include default devise modules. Others available are:
  # :confirmable, :lockable, :timeoutable and :omniauthable
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable,:omniauthable, :omniauth_providers => [:facebook]


  def self.from_omniauth(auth)
     where(provider: auth[:provider], uid: auth[:uid]).first_or_create do |user|
       if auth[:info]
         user.email = auth[:info][:email]
         user.name = auth[:info][:name]
       end

       user.password = Devise.friendly_token[0,20]
     end
  end
  has_many :articles , :dependent => :destroy
end

and i put this line in config/initializers/divise.rb

config.omniauth :facebook, '504432376574467', 'b2bb80641fcc2ca4d28e48c5ce*******'

Upvotes: 1

Views: 1217

Answers (1)

vijoc
vijoc

Reputation: 693

My guess would be that User.from_omniauth fails to create the user (possibly due to user.password and user.password_confirmation not matching), which causes the Users::OmniauthCallbacksController#facebook to reach the end of the method without going inside the if clause.

To check, you could for example add an else clause to your Facebook callback and raise an error in there.

Upvotes: 1

Related Questions