Bonjour à tous,

J'essaye d'implémenter une connexion via Facebook sur mon blog avec Devise et omniauth mais cela ne fonctionne pas.
J'ai suivi le tutoriel de Grafikart pour devise et Omniauth.

Avant toute chose, je précise que je suis en local pour le moment et que j'ai bien mis http://localhost:3000 comme url lorsque j'ai crée mon app facebook.
J'ai aussi testé sur heroku mais j'ai le même message d'erreur.

J'ai aussi rajouté un facebook_id dans la table users.

J'ai cette erreur lorsque je clique sur le lien de connexion "Se connecter via Facebook":

Je n'arrive pas à afficher une image, pour voir le message d'erreur, rendez-vous à cette url:
[https://www.facebook.com/v2.6/dialog/oauth?client_id=804932359691593&redirect_uri=https%3A%2F%2Ffierce-sierra-61774.herokuapp.com%2Fusers%2Fauth%2Ffacebook%2Fcallback&response_type=code&scope=user%2C+public_repo&state=4936ffb64dcd77ab95d5f6dbb7cc001416c0c63e108a9f2f]

Voici mon code:

devise.rb:

config.omniauth :facebook, mon_app_id, my_secret_key, scope: 'user, public_repo'

user.rb:

class User < ApplicationRecord
  # Include default devise modules. Others available are:
  # :confirmable, :lockable, :timeoutable and :omniauthable

  # attr_accessor :login

  # validates :pseudo, presence: true, uniqueness: {case_sensitive: false}, format: {with: /\A[a-zA-Z0-9 _\.]*\z/}
  #validates :email, presence: true, format: { with: '@', message: 'Doit contenir un @' }

  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable, :confirmable
  devise :omniauthable, omniauth_providers: [:facebook]

  #def self.find_first_by_auth_conditions(warden_conditions)
  #  conditions = warden_conditions.dup
  #  if login = conditions.delete(:login)
  #    where(conditions.to_hash).where("lower(pseudo) = :value OR lower(email) = :value", value: login.downcase).first
  #  else
  #    where(conditions.to_hash)
  #  end
  #end

  def self.from_facebook(auth)
    where(facebook_id: auth.uid).first_or_create do |user|
      user.facebook_id = auth.uid
      user.email = auth.info.email
      user.password = Devise.friendly_token[0, 20]
      user.skip_confirmation!
    end
  end
end

omniauth_callbacks_controller:

class Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController
  # You should configure your model like this:
  # devise :omniauthable, omniauth_providers: [:twitter]
 
  def facebook
    @user = User.from_facebook(request.env['omniauth.auth'])
 
    if @user.persisted?
      sign_in_and_redirect @user, event: :authentification
    else
      redirect_to new_user_session_path
    end
  end
end

new.html.erb:

<p><%= link_to 'Se connecter via Facebook', user_facebook_omniauth_authorize_path %></p>

routes.rb:

devise_for :users, controllers: {
    sessions: 'users/sessions',
    omniauth_callbacks: 'users/omniauth_callbacks'
}

Merci d'avance pour votre aide! :)

Aucune réponse