rails google developers ruby-on-rails facebook omniauth

ruby-on-rails - google - rails devise omniauth facebook



Omniauth-Facebook sigue informando invalid_credentials (7)

Estoy tratando de implementar omniauth-facebook como se describe en Railscast # 360 y me he topado con un obstáculo. Cuando hago clic en el enlace de inicio de sesión, aparece la ventana emergente deseada solicitando que ingrese mis credenciales de Facebook, pero cuando envío, aparece el error OmniAuth :: Strategies :: OAuth2 :: CallbackError. En los registros de Apache, esto se imprime: (Facebook) Error de autenticación. invalid_credentials: OmniAuth :: Strategies :: OAuth2 :: CallbackError, OmniAuth :: Strategies :: OAuth2 :: CallbackError

aquí está el código relevante:

omniauth.rb

OmniAuth.config.logger = Rails.logger Rails.application.config.middleware.use OmniAuth::Builder do provider :facebook, ENV[''FACEBOOK_APP_ID''], ENV[''FACEBOOK_SECRET''] end

sessions_controller.rb

class SessionsController < ApplicationController def create user = User.from_omniauth(env["omniauth.auth"]) session[:user_id] = user.id redirect_to root_url end def destroy session[:user_id] = nil redirect_to root_url end end

application.html.erb

<div id="fb-root"></div> <script> window.fbAsyncInit = function() { FB.init({ appId : ''(**my app id**)'', // App ID status : true, // check login status cookie : true // enable cookies to allow the server to access the session }); $(''#sign_in'').click(function(e) { e.preventDefault(); return FB.login(function(response) { if (response.authResponse) { return window.location = ''/auth/facebook/callback''; } }); }); return $(''#sign_out'').click(function(e) { FB.getLoginStatus(function(response) { if (response.authResponse) { return FB.logout(); } }); return true; }); }; </script>

¿Me estoy perdiendo algo simple? He estado buscando una solución para los últimos días.


En su omniauth.rb agregue el código:

OmniAuth.config.on_failure = Proc.new do |env| new_path = "/auth/failure" [302, {''Location'' => new_path, ''Content-Type''=> ''text/html''}, []] end


Me he dado cuenta de que omniauth-oauth2> 1.0.3 también causará un problema, desinstalando una versión más alta y manteniendo omniauth-oauth2 1.0.3 resuelto el problema.


Para cualquiera que sea descuidado como yo,

Remember to switch you app out of Sandbox mode en developers.facebook antes de implementar!

El modo de espacio aislado desencadenará el error de csrf para todos menos para la cuenta del desarrollador.


Parece que omniauth-facebook v1.4.1 introdujo un problema con CSRF. Una solución temporal es simplemente retroceder a v1.4.0. En su Gemfile, cambie la línea omniauth-facebook a:

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

He informado el problema: https://github.com/mkdynamic/omniauth-facebook/issues/73


Tuve un problema similar en el que funcionaba para 1 usuario pero obtuve el error de autenticación para el segundo usuario.

Al deshabilitar el modo Sandbox (Aplicaciones> Configuración> Avanzado) parece que lo ha solucionado.


Yo también tengo esto

Quite la secuencia de comandos JS en su application.html.erb (pero mantenga el div fb-root ) funcionará. De todos modos, la pantalla de inicio de sesión de FB ya no se mostrará en una ventana emergente, sino que se le redirigirá al inicio de sesión de FB y luego a su sitio.


es posible que desee anular OmniauthCallbacksController y agregar esto al registro:

class OmniauthCallbacksController < Devise::OmniauthCallbacksController def failure_message exception = env["omniauth.error"] #add login here: Rails.logger.info "exception: #{exception.inspect}" error = exception.error_reason if exception.respond_to?(:error_reason) error ||= exception.error if exception.respond_to?(:error) error ||= env["omniauth.error.type"].to_s error.to_s.humanize if error end #other code ... end

después de que he agregado el mío, encontré el problema de "ip no válida ..."