2
votes

I integrated omniauth-facebook using https://github.com/plataformatec/devise/wiki/OmniAuth%3a-Overview. But I am getting error of :

Could not authenticate you from Facebook because "Invalid credentials".

I have devise installed. When i click on facebook sign in link, it redirects me to facebook login. When i enter my details, it comes back to devise sign and gives above error. I checked the solution for "Invalid credentials" on https://github.com/plataformatec/devise/wiki/OmniAuth%3a-Overview and my app is header set for App Type = Web. Not getting why it is not working.

Also my app is live but yet to approve from facebook. But i don't think it is related to this error. Following are the things i did for omniauth-facebook:

Gemfile contains:

gem 'omniauth'
gem 'omniauth-facebook', '1.4.0'

In user model, added:

devise :omniauthable, :omniauth_providers => [:facebook]
attr_accessible :provider, :uid

  def self.find_for_facebook_oauth(auth, signed_in_resource=nil)
    user = User.where(:provider => auth.provider, :uid => auth.uid).first
    unless user
    user = User.create(name:auth.extra.raw_info.name,
                       provider:auth.provider,
                       uid:auth.uid,
                       email:auth.info.email,
                       password:Devise.friendly_token[0,20]
                      )
   end
 user
 end

devise.rb

require "omniauth-facebook"
config.omniauth :facebook, "APP_ID", "APP_SECRET", :scope => "offline_access, email" 

Link for facebook sign_in:

<%= link_to "Sign in with Facebook", user_omniauth_authorize_path(:facebook) %>

route.rb:

devise_for :user, :controllers => { :omniauth_callbacks => "omniauth_callbacks" }

Omniauth controller:

class Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController
  def facebook
    @user = User.find_for_facebook_oauth(request.env["omniauth.auth"], current_user)
    if @user.persisted?
      sign_in_and_redirect @user, :event => :authentication #this will throw if @user is not activated
      set_flash_message(:notice, :success, :kind => "Facebook") if is_navigational_format?
    else
      session["devise.facebook_data"] = request.env["omniauth.auth"]
      redirect_to new_user_registration_url
    end
   end
 end

Can anybody help in this?

1
I'm not sure about it, but might it be that you have a space before email on your omniauth scope? I had the same error due to a typo - golfadas
This has been flagged as a duplicate of an identical question you posted that had more info. In the future if you have additional info to add to a question, please edit the existing question instead of starting a new one. - mindriot

1 Answers

1
votes

Try to clear your browser cookies. sometimes omniauth won't work just because you have to delete your browser cookies.

an other thing could be that the version isn't right.

The problem seems to be the dependencies. At 1.4.0 it requires omniauth-oauth2 1.0.3, and at 1.4.1 it required omniauth-oauth 1.1.x

as seen here: https://github.com/intridea/omniauth/issues/276