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! :)